#php #apache #.htaccess #mod-rewrite #friendly-url
#php #apache #.htaccess #мод-перезапись #дружественный-url
Вопрос:
Я использую следующий .htaccess
код для включения дружественных URL-адресов на веб-сайте.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]
Он работает так, как должен, но есть кое-что, что меня беспокоит. Когда, скажем, я запрашиваю страницу, на которой есть a <img src="sth.png" />
и sth.png
которая не существует на сервере, .htaccess
код даст указание серверу сделать запрос на index.php?sth.png
, что приведет к совершенно ненужной загрузке всей структуры веб-сайта.
Что я могу сделать, чтобы предотвратить это?
Комментарии:
1. Вы, конечно, можете исключить обработку определенных расширений правилами перезаписи, но действительно ли это такая большая проблема? 404 не должно быть правилом. Ваш index.php не выдавать 404, если ресурс не может быть найден?
2. Возможно, вам следует изменить свое правило и исключить файлы изображений? Но правильно ли, что вы проверяете, не существует ли файл? Возможно, удалите «!» и проверьте, существует ли файл.
3. @Pekka, если запрошенная страница не существует, фреймворк выдаст 404, но он все равно загрузит кучу вещей, чтобы показать правильную страницу 404.
4. @Emanuil да, но как часто случается, что запрашивается недопустимое изображение ? Если это произойдет, вы исправите страницу, содержащую поврежденную ссылку, как можно скорее, так что это не должно быть большой проблемой. (В любом случае, это не имеет большого значения. В любом случае будет работать нормально.)
Ответ №1:
Добавление этой перезаписываемой секунды:
RewriteCond %{REQUEST_FILENAME} !.png$
следует исключить попадание файлов PNG под действие правил перезаписи.
Но, как сказано в комментарии, я бы рассмотрел возможность обработки 404-х внутри index.php независимо от их типа — они не должны происходить так часто, чтобы загрузка PHP-файла в любом случае становилась проблемой производительности.