2008-11-03 4 views
0

Хорошо. Поэтому я создаю этот сайт, доступный через два разных домена. Поэтому я не могу использовать RewriteBase в моем .htaccess. Правила (ниже), которые я использую для решения этой проблемы, работают нормально. Тем не менее, когда я использую приведенные ниже параметры .htaccess в своем локальном поле с чистыми URL-адресами (WAMP), все работает отлично, но в тот момент, когда я использую это на живом сервере (shared hosting LAMP), каждая страница, которую я просматриваю, отображает домашнюю страницу (один под индексом, который я предполагаю), хотя URL-адрес браузера явно обновляется.Apache .htaccess mod_rewrite и чистые URL-адреса

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} ^/domain1.com/(.*)$ 
    RewriteRule ^(.*)$ /domain1.com/index.php?q=$1 [L,QSA] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} ^/domain2.com/(.*)$ 
    RewriteRule ^(.*)$ /domain2.com/index.php?q=$1 [L,QSA] 
</IfModule> 

Любые помощь или идеи очень ценятся.

  • Люк
+0

Вы уже проверили, действительно ли mod_rewrite включен на вашем реальном сервере? Если да, подтвердили ли вы, что любые другие применимые настройки для Apache также идентичны между вашим тестовым сервером и сервером Live? – 2008-11-03 22:19:34

ответ

2

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

Возможно, вы сможете «имитировать» проблему, выполнив переписывание каталогов в вашей основной конфигурации Apache. (Общий хостинг, очевидно, делает свою собственную переписывание, прежде чем он попадает в .htaccess!) Если вы не можете воспроизвести проблему, вам может потребоваться отладка проб и ошибок на удаленном сервере. Это уродливо, но если это ваш единственный вариант:

Используйте флаг R (redirect) в подстановках, чтобы отправить любой перезаписанный URL-адрес обратно в ваш браузер. Используйте TELNET (или соответствующую надстройку браузера) для проверки ответов HTTP.

Не забудьте избежать точек в регулярных выражениях!

В качестве побочного примечания шаблон RewriteRule сопоставляется перед RewriteConds над ним. Такая настройка, вероятно, лучше для производительности:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/domain1\.com/(.*)$ /domain1.com/index.php?q=$1 [L,QSA] 
#     ^should be escaped 

Обратите внимание, что я не тестировал это.

Смежные вопросы