Mod_Rewrite: правило htaccess для перезаписи URL изображения - PullRequest
0 голосов
/ 05 августа 2020

Как мы можем использовать Apache Mod_Rewrite внутри файла .htaccess для перезаписи реальных путей только файлов .png?

Видимый URL:

.com/italy/region/internal/map1234.png

.com/italy/country/map1234.png

.com/italy/map1234.png

Реальное расположение файла:

.com/images/map1234.png

Примечание. Я имею в виду Mod_Rewrite, а не обычное перенаправление 301.

1 Ответ

1 голос
/ 05 августа 2020
RewriteCond %{REQUEST_URI} !/images/.*
RewriteRule ^(.*\.(gif|jpg|png))$ images/$1 [QSA,L]

это работает, но не для подпапок.

Это все равно перенаправляло бы изображения во вложенные папки, но /italy/region/internal/map1234.png было бы перенаправлено на /images/italy/region/internal/map1234.png.

Чтобы он работал для любых подпапок , измените его на:

RewriteCond %{REQUEST_URI} !/images/
RewriteRule /(\w+\.(gif|jpg|png))$ images/$1 [L]

\w+ (ранее .*) - исключив sla sh в захваченном шаблоне мы гарантируем, что мы захватываем только имя файла, а не весь URL-путь.

Флаг QSA не требуется.

ОБНОВЛЕНИЕ: К сожалению, этот код не работает (404), если я использую изображения с da sh. Например, my-name.png Есть идеи?

Измените \w (любой символ слова) в приведенном выше регулярном выражении на [\w-], чтобы включить дефис. Например:

RewriteRule /([\w-]+\.(gif|jpg|png))$ images/$1 [L]
...