htaccess RewriteRule重定向到父目录?

时间:2012-01-09 10:29:46

标签: .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]
...

我试图:

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]

还试过这个:

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]

它总是从/ forum / rootFileName重定向到/ forum / rootFile,但永远不会重定向到/ rootFile。

我的错误在哪里?

3 个答案:

答案 0 :(得分:7)

您无法重写到文档根目录之外。这是安全的事情。

您可以创建仅包含<?php include('../rootfile.php'); ?>

的rootFile.php

答案 1 :(得分:4)

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

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

让我举个例子。假设我们的文档根目录是/var/www/project1,并且您要在/var/www/project2/target.php

上重写

然后,您必须在/var/www/project1内创建一个指向/var/www/project2的符号链接(例如)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>

答案 2 :(得分: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]