Как перенаправить URL .htaccess и управлять несколькими вызовами на missing.html страница?

#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? (Помогло бы использование правила перенаправления, которое вы уже настроили.)