Исправление конфликта mod_rewrite и mod_alias - PullRequest
0 голосов
/ 25 июля 2010

У меня есть настройка VirtualHost, например:

Alias /somedir /some/other/dir

http://example.com/somedir отлично работает

Однако мне нужно настроить mod_rewrite для / somedir (приложение CodeIgniterдля которого я хочу чистые URL).Вот фрагмент из вики CodeIgniter:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Обычно, когда mod_rewrite используется в подкаталогах, изменение RewriteBase для соответствия имени каталога достаточно для его работы:

RewriteBase /somedir

... но, похоже, он не работает с mod_alias (получение 404 с).Есть ли решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2016

Хотя я не тестировал ваш образец, в моих собственных конфигурациях я не добился большого успеха с флагом PT, возможно, из-за взаимодействия с правилами перезаписи в моей конфигурации.

Мне было проще ограничить использование псевдонимов условиями перезаписи и всегда использовать путь файловой системы в выходных данных перезаписи.

Define SOME_DIR = "/somedir"
Define SOME_OTHER_PATH = "/some/other/dir"

Alias "${SOME_DIR}" "${SOME_OTHER_PATH}"

RewriteEngine On
RewriteCond ${SOME_DIR}%{REQUEST_URI} !-d
RewriteCond ${SOME_DIR}%{REQUEST_URI} !-f

RewriteRule ^${SOME_DIR}/(.*)$ ${SOME_OTHER_PATH}/index.php/$1 [NC,QSA,L]
0 голосов
/ 26 июля 2010

Следующее сработало на моем тестовом сервере, поэтому попытка этого может решить вашу проблему ..

На вашем виртуальном хосте:

Alias /somedir /some/other/dir

RewriteEngine On

# I think these conditions should work correctly; the other ones shouldn't
# because the alias has not been applied at this stage of processing yet
RewriteCond /some/other/dir%{REQUEST_URI} !-d
RewriteCond /some/other/dir%{REQUEST_URI} !-f
# L is unnecessary in this context, but be sure to PT so mod_alias picks up
# on the rewrite
RewriteRule ^/somedir/(.*)$ /somedir/index.php/$1 [PT]
...