在这种情况下,我无法理解如何重定向到父目录: 我有一个带.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。
我的错误在哪里?
答案 0 :(得分:7)
您无法重写到文档根目录之外。这是安全的事情。
您可以创建仅包含<?php include('../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]