Дружественный 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/
путь в нем, а не то, что было внутренне переписано.