Apache .htaccess mod_rewrite и очистка URL-адресов
-
06-07-2019 - |
Вопрос
ОК.Итак, я создаю этот сайт, который доступен через два разных домена.Поэтому я не могу использовать 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
Обратите внимание, что я не тестировал это.