2014-01-13 4 views
0

У меня есть некоторые правила перезаписи в файле httpd.conf. Есть ли способ заставить apache проверять правила перезаписи только в том случае, если URL недействителен? Моим правилам перезаписи предшествуют проверки правильности файла REQUEST_FILENAME и действительной папки. Но в документации упоминается, что условия перезаписи проверяются только ПОСЛЕ того, как она находит соответствие для правила перезаписи.Apache httpd.conf правила перезаписи

Итак, всякий раз, когда есть запрос на URL-адрес, apache проверяет каждое правило перезаписи для этого URL-адреса. Почти на всех страницах есть изображения, файлы .js и .css и еще несколько файлов с ними. Apache также проверяет их на правила перезаписи в httpd.conf (я вижу это в RewriteLog, сгенерированном для каждого URL-адреса). Это значительно замедляет работу сайта.

Мне известно о директиве FallbackResource. Я не хочу использовать его на данный момент, потому что он возвращает код состояния http по умолчанию по умолчанию. Я хочу вернуть правильный код состояния (обычно 301) всякий раз, когда есть запрос на страницу, которая не была найдена Apache (обычно неправильный URL-адрес имеет правильный аналог, следовательно, необходимо отправить 301). Отправка правильного кода статуса http также приносит пользу нашим усилиям SEO. Если есть способ отправить правильный код состояния http с помощью директивы FallbackResource, я был бы открыт для использования этой опции.

Я пробовал поиск по этим вопросам и не нашел ответа. Я пробовал с разными RewriteCond (s), но, как говорится в документации, каждый перезаписываемый файл проверяется в любом случае.

Любые указатели на это оказали бы большую помощь.

ответ

0

Кажется, что для вас будут какие-то чтения, но я всегда использую это как «библию», когда дело доходит до переписывания правила и не перестало меня подводить. Возможно, это сделает то же самое для вас.

http://corz.org/server/tricks/htaccess2.php

0

Почему бы не использовать следующее:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /not-found.php [L] 

Я бы поставил в файл .htaccess, расположенный в корневой папке. Таким образом, вы можете легко настроить его для каждого сайта.

Смежные вопросы