.htaccess mod_rewrite имеет разные результаты на разных сайтах - PullRequest
0 голосов
/ 08 февраля 2010

Я использую mod_rewrite для создания SEO-URL. В основном, это работает следующим образом: все запросы перехватываются .htaccess и перенаправляются в скрипт php (скажем, transform.php). transform.php анализирует SEO-URL и преобразует его в обычный URL-адрес, затем включает index.php, затем перехватывает выходные данные приложения (index.php) и использует RegEx для преобразования всех обычных URL-адресов в SEO-URL. Поэтому жизненно важным шагом является выполнение всех запросов через transform.php. Мой .htaccess довольно длинный, но мне удалось ограничить его следующими строками.

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on

    RewriteRule ^index\.php?(.*)$ ./transform.php?p=$1&%{QUERY_STRING} [L]

</IfModule>

Проблема возникает с начальным (корневым) URL-адресом: http://mysite.com/. Когда я набираю http://mysite.com/ и сайт расположен на моем локальном компе, все работает нормально. http://mysite.com/ перехватывается .htaccess и отправляется в transform.php для дальнейшей обработки. Однако на другом сервере эта строка не работает (скажем, для http://mysite -other-server.com / ). Эта строка .htaccess просто не перехватывает запрос. Все отлично работает для http://mysite -other-server.com / index.php .

Более того, у меня есть несколько сайтов на этом втором сервере, и некоторые из них работают, а некоторые нет. Для некоторых из них URL-адрес сначала разрешается в http://mysite -other-server.com / index.php , а затем обрабатывается .htaccess, в то время как для других URL-адрес не разрешается, а .htaccess работает с http://mysite -other-server.com /

Я очень запутался и попробовал гуглить без всякой удачи. Любая помощь высоко ценится.

1 Ответ

1 голос
/ 08 февраля 2010

Я предполагаю, что Apache настроен не принимать файлы .htacces.

Вы должны включить его из конфигурации httpd с настройкой AllowOverride.

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

Другая возможность состоит в том, что на производственном сервере не загружен mod_rewrite, проверьте директивы LoadModule для этого.

...