Вопрос

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

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

  • Люк
Это было полезно?

Решение

Вероятно, лучшее, что можно сделать, это воспроизвести проблему в вашем локальном окне и включить 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top