htaccess RewriteRule重定向到父目录?

Ант*_*нко 7 .htaccess mod-rewrite

在这种情况下,我无法理解如何重定向到父目录:我有一个带.htaccess文件的根目录,其中rewriteEngine打开.在这个目录中,我有一个文件rootFile.php.此外,在这个目录中我有一个目录"论坛",其中有另一个.htaccess文件.

当有请求"forum.mySite.com/rootFile.php",我需要重定向到"mySite.com/rootFile.php",这意味着我需要重定向请求到父目录.

/forum/.htaccess:

RewriteEngine on

RewriteBase /forum/

RewriteRule ^sitemap                    /forum/map.php                [L]
...
Run Code Online (Sandbox Code Playgroud)

我试过了:

RewriteEngine on

RewriteBase /forum/

RewriteRule ^rootFileName                   ../rootFile.php            [L]
\# or so RewriteRule ^rootFileName           /rootFile.php              [L]
\# or so RewriteRule ^rootFileName           rootFile.php               [L]

RewriteRule ^sitemap                    /forum/map.php             [L]
Run Code Online (Sandbox Code Playgroud)

还尝试了这个:

RewriteEngine on

RewriteBase /

RewriteRule ^rootFileName                   ../rootFile.php            [L]
\# or so RewriteRule ^rootFileName           /rootFile.php             [L]
\# or so RewriteRule ^rootFileName           rootFile.php              [L]

RewriteBase /forum/

RewriteRule ^sitemap                    /forum/map.php             [L]
Run Code Online (Sandbox Code Playgroud)

它总是从/ forum/rootFileName重定向到/ forum/rootFile,但从不到/ rootFile.

我的错误在哪里?

Ger*_*ben 7

您无法在document-root之外重写.这是安全的事情.

你可以创建一个只包含的rootFile.php <?php include('../rootfile.php'); ?>


Fra*_*ula 5

出于安全原因,您无法重写到文档根目录之外的路径。实际上,应避免这种情况,因为这不是一个好习惯。

无论如何,要回答您的问题,一种解决方法可能是在文档根目录中创建一个指向目标/父目录的符号链接,但是您应该保护它免受直接访问。

让我举个例子。假设我们的文档根目录是/var/www/project1,而您想重写/var/www/project2/target.php

然后,您必须在内部创建一个/var/www/project1指向/var/www/project2named(例如)的符号链接p2

这应该是您的/var/www/project1/.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} /hello/world
    RewriteRule ^(.*)$ p2/target.php [QSA,L] # p2 is the symlink name!
</IfModule>
Run Code Online (Sandbox Code Playgroud)


Oli*_*ons 0

你写了:

当有请求“forum.mySite.com/rootFile.php”时,我需要将其重定向到“mySite.com/rootFile.php”,这意味着我需要将请求重定向到父目录。

你的意思:

当有请求时"mySite.com/forum/rootFile.php",我需要将其重定向到,"mySite.com/rootFile.php"这意味着我需要将请求重定向到父目录。

...这又意味着:

当有请求时"/forum/rootFile.php",我需要将其重定向到,"/rootFile.php"这意味着我需要将请求重定向到父目录。

在你的.htaccess目录中/forum试试这个:

RewriteEngine On
RewriteRule ^rootFileName(.*) /rootFile.php  [QSA,R=301,L]
Run Code Online (Sandbox Code Playgroud)