#php #.htaccess
#php #.htaccess
Вопрос:
Я настроил свой .htaccess для перенаправления вызовов на mydomain.com/something.html для mydomain.com/index.php?q=something
Это работает нормально…. но я заметил, что с момента перехода на новый хостинг я получаю несколько запросов на запрос «отсутствует». Я почти уверен, что это связано с тем, что html-страница по умолчанию для неправильных URL-адресов является «missing.html «который перенаправляется как mydomain.com/index.php?q=missing . Таким образом, любой отсутствующий URL приведет к запуску моего PHP-скрипта с «missing» в качестве входных данных.
Есть ли способ сохранить перенаправление URL и управлять вызовами на missing.html фактически не вызывая мой PHP-скрипт для поиска отсутствующих URL-адресов?
Редактировать с помощью решения; вот мой .htaccess, который перенаправляет, только если нет существующего URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Options FollowSymLinks
RewriteEngine on
RewriteRule (.*).html index.php?q=$1
Кажется, что RewriteCond нужно поместить раньше (как показано выше).
Комментарии:
1.
RewriteCond
обычно появляется послеRewriteEngine on
; выглядит немного странно с этим там.
Ответ №1:
Вы ищете RewriteCond
.
Попробуйте это в своем .htaccess
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Эти правила также остановят перезапись для всего, что является доступным путем. Если вы хотите строго missing.html
, то следующего правила будет достаточно:
RewriteCond %{REQUEST_URI} !/missing.html
Обратите внимание, что эти директивы должны быть приведены перед RewriteRule
.
Комментарии:
1. Почему им нужно «приходить раньше
RewriteRule
«?2. Я полагаю (я могу ошибаться), что в нем указаны условия, с которыми работают следующие
RewriteRule
.
Ответ №2:
Возможно ли добавить правило перезаписи, которое имеет приоритет над другим и специально перезаписывает mydomain.com/missing.html к местоположению вашей страницы 404? (Помогло бы использование правила перенаправления, которое вы уже настроили.)