2010-02-08 6 views
0

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

<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

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

Необходимо включить его из конфигурации httpd с помощью параметра AllowOverride.

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

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

+0

Привет и спасибо за ваш ответ! Сервер определенно принимает файлы .htaccess, потому что http://mysite-other-server.com/index.php работает должным образом. То же самое касается mod_rewrite. Однако по какой-то причине http://mysite-other-server.com/ не дает того же результата. Однако он все еще попадает в файл .htaccess RewriteRule^index \ .php? (. *) $ .... не влияет. Хотя на других сайтах на этом же сервере RewriteRule^index \ .php? (. *) $ .... отлично подходит для http://mysite-other-server.com/ – Eugene

+0

Итак, чтобы разобраться: http: //mysite-other-server.com/ и http://mysite-other-server123.com/ находятся на одном сервере. Тот же файл .htaccess и transform.php используется для обоих. Оба http://mysite-other-server123.com/ и http://mysite-other-server123.com/index.php сопоставляются этим регулярным выражением и переходят в transform.php Но только http: // mysite-other -server.com/index.php сопоставляется, а http://mysite-other-server.com/ - нет. – Eugene

+0

Остерегайтесь, чтобы директива AllowOverride могла быть установлена ​​на определенный VirtualHost, позволяя одному Apache иметь домен, а другой - нет. – Johnco