RewriteRules, которые совпадают внутри псевдонима Apache или нет - PullRequest
2 голосов
/ 05 мая 2011

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

Когда это прямое извлечение нормального документа, мой .htaccess выглядит примерно так:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

Я развернул сайт в среде с псевдонимом, подобным следующему:

Alias /foo /path/to/my/application/

Я обнаружил, что мне нужно изменить .htaccess на следующее:

RewriteEngine On
RewriteBase /foo
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /foo/index.php [NC,L]

У меня вопрос: как я могу переписать мой .htaccess, чтобы перезапись работала одинаково, независимо от того, находится ли она под псевдонимом или нет? Есть ли какой-то способ, которым я могу определить, был ли установлен псевдоним, или какой-то другой способ выражения RewriteRules?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Поскольку mod_rewrite имеет приоритет над mod_alias, вам, вероятно, нужно заменить псевдонимы правилами перезаписи.

Это:

Alias /foo /path/to/my/application/

станет:

RewriteRule ^foo.*$ path/to/my/application$1 [L]

Тогда правила в файле .htaccess, которые могут находиться или не быть в корне, должны работать без необходимости их изменения.

0 голосов
/ 03 сентября 2013

Решением является создание символической ссылки, если у вас есть доступ к корневому каталогу документа:

ln -s /<path to application> /<document root>/foo
...