htaccess RewriteRule, перенаправляющий в родительский каталог? - PullRequest
7 голосов
/ 09 января 2012

Я не могу понять, как перенаправить в родительский каталог в этом случае: у меня есть корневой каталог с файлом .htaccess, где включен rewriteEngine.В этом каталоге у меня есть файл rootFile.php.Кроме того, в этом каталоге у меня есть каталог "forum", в котором находится другой файл .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 ]

7 голосов
/ 09 января 2012

Вы не можете переписать вне документа-корня. Это вещь безопасности.

Вы можете просто создать rootFile.php, который содержит только <?php include('../rootfile.php'); ?>

4 голосов
/ 14 февраля 2014

Вы не можете переписать пути, которые находятся за пределами корня вашего документа по соображениям безопасности.На самом деле этого следует избегать, потому что это не очень хорошая практика.

В любом случае, чтобы ответить на ваш вопрос, можно обойти это путем создания символической ссылки в корневом каталоге вашего документа, которая указывает на каталог target / parent, но вам следуетзащитить его от прямого доступа.

Позвольте мне привести пример.Предположим, что корнем нашего документа является /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>
0 голосов
/ 09 января 2012

Вы писали:

Когда есть запрос на "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 dir попробуйте это:

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