Apache .htaccess mod_rewrite и чистые URL - PullRequest
0 голосов
/ 04 ноября 2008

Хорошо. Так что я создаю этот сайт, который доступен через два разных домена. Поэтому я не могу использовать RewriteBase в моем .htaccess. Правила (ниже), которые я использую для решения этой проблемы, работают нормально. Однако, когда я использую указанные ниже настройки .htaccess на своем локальном ящике с чистыми URL-адресами (WAMP), все работает нормально, но в тот момент, когда я использую это на живом сервере (LAMP общего хостинга), на каждой странице, по которой я перехожу, отображается домашняя страница один под индексом, я думаю), хотя 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>

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

  • Люк

1 Ответ

2 голосов
/ 04 ноября 2008

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

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

Используйте флаг R (перенаправление) в подстановках, чтобы отправить любой переписанный 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

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

...