Дружественный URL для изображений

Пожалуйста, предложите мне, что положить в .htaccess файл.

У меня есть PNG, GIF, JPG изображения на сервере http://domain.tld/images/anyimage.anyextension

Хотите сделать URL более дружелюбными, как http://domain.tld/anyimage.anyextension


Это у меня сейчас. Первые две строки изменяют ссылки, как описано. Но последняя строка не меняет его обратно на сервер.

RewriteCond %{REQUEST_URI} ^/images/(.+)(\.gif|\.jpg|\.png)$ [NC]
RewriteRule ^image/(.+)$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)$ /images/$1 [L]

Если я добавлю

RewriteCond %{REQUEST_URI} ^/([^/.]+\.(png|gif|jpg))$ [NC]
RewriteCond %{DOCUMENT_ROOT}/image/%1 -f
RewriteRule ^([^/.]+\.(png|gif|jpg))$ /image/$1 [L,NC]

Сразу после предыдущего правила строки запроса изображения не открываются. Если раньше нет проблем. Что бы это могло быть? У вас есть идея, как это исправить? Последняя строка RewriteRule ^/?(.+)$ /?$1 [L] вызвать этот конфликт

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?([^\ ]+) [NC]
RewriteRule ^$ /%1? [R=301,L]
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)$ /?$1 [L]

1 ответ

Решение

Не уверен, как это делает его более дружелюбным, кроме того, что он короче. Вы можете попробовать добавить это в файл htaccess в корневом каталоге вашего документа:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([^/.]+\.(png|gif|jpg))$ [NC]
RewriteCond %{DOCUMENT_ROOT}/images/%1 -f
RewriteRule ^([^/.]+\.(png|gif|jpg))$ /images/$1 [L,NC]

Тогда вы можете изменить все свои ссылки с http://domain.tld/images/anyimage.anyextension в http://domain.tld/anyimage.anyextension

Первое условие проверяет, чтобы убедиться, что запрос anyimage.anyextension, если расширение является регистронезависимым png, gif или jpg.

Второе условие проверяет, чтобы убедиться, что запрошенное изображение действительно существует в /images/ каталог.


RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /images/(.+)(\.gif|\.jpg|\.png) [NC]
RewriteRule ^image/(.+)$ /$1 [R=301,L]

Это перенаправляет браузер на не-/image/ URL. Здесь происходят две совершенно разные вещи. Один имеет дело с браузером, а другой - с контентом на сервере. Посмотрите верхнюю часть этого ответа, который объясняет, чем они отличаются.

Правила, которые у вас есть, не будут работать. Первый:

RewriteRule ^/(.+)$ /images/$1 [L]

никогда не совпадет. URI, используемые для сравнения с регулярным выражением RewriteRule в файлах htaccess, удаляют начальную косую черту, поэтому никакой URI не будет начинаться с /, Вы должны избавиться от этого.

Во-вторых, как только вы это сделаете, вы получите 500 внутренних ошибок сервера, потому что ваши правила вызовут внутренний бесконечный цикл. Вы должны соответствовать %{THE_REQUEST} чтобы браузер действительно запрашивал URL с /images/ путь в нем, а не то, что было внутренне переписано.

Другие вопросы по тегам