2013-02-10 4 views
2

Если пользователь обращается к URL-адресу, скажем: http://www.domain.com/image/orange.jpg , но orange.jpg не существует, однако orange.png делает, может .htaccess разрешить пользователю его находить?Может .htaccess помочь мне в этой ситуации?

+1

НЕТ; htaccess не использует список возможных результатов для каждого запроса; почему бы вам повторить неверный URL-адрес и все еще хотите найти правильный URL-адрес? –

+0

Возможно включение [Multiviews] (http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html#multiviews) решает эту проблему. –

ответ

1

Это должно быть возможно. mod_rewrite позволяет проверять наличие файлов. И он позволяет несколько переходов перезаписи, если вы не остановите этот процесс активно, используя флаг [L]. ,

Так что попробовать с чем-то вроде этого в качестве отправной точки (непроверенных):

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/image/([^/.]).jpg$ 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule ^/image/([^/.]).jpg /image/$1.png 

RewriteCond %{REQUEST_URI} ^/image/([^/.]).png$ 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule - /image/no-found [G,L] 

Вышесказанное относится, если они определены внутри (конфигурация каждого хоста) конфигурации центрального сервера. Для файлов стиля .htaccess синтаксис несколько отличается: в этом случае не должно присутствовать ведущая косая черта (/) внутри RewriteRule. Если у вас есть выбор, выполните переписывание в конфигурации сервера. Файлы стиля .htaccess - это нечто вроде обходного пути и склонности к ошибкам. По возможности старайтесь избегать их.

Обратите внимание, что такая установка несколько ограничена и раздражает для поддержания. Часто это лучшая альтернатива для установки небольшого сценария оболочки (вероятно, на основе php), который обрабатывает запрос и проверяет ряд альтернатив, прежде чем принимать решение о том, какой ответ отправить. Вы можете переписать запросы на что-то вроде этого:

RewriteEngine on 
RewriteRule ^/image/([^/.])\..+$ /image.php?name=%1 

Теперь вы можете служить этот запрос со сценарием image.php где вы можете проверить для существующих версий изображений без спешки и возвращать заголовки и содержимое по своему вкусу.

+0

+1 для идеи. Но, возможно, первое правило изменяет расширение запрашиваемого файла, когда оно существует, а не набирает другой с другим расширением, если оно не существует. Не уверен, что это было вашим намерением. –

+0

@faa Извините, я не понимаю, что вы имеете в виду. Первое правило намеревается изменить «расширение» из '.jpg' tp '.png', если вариант jpg не существует _not_. Это по просьбе ОП. Почему бы не доставить этот вариант png? – arkascha

+0

Согласно правилу, этот вариант 'png' доставляется только в том случае, если существует запрошенный файл с расширением' jpg'. Это положительное условие того, что правило требует '^/whatever ...', где 'what' должно существовать. Возможно, вы имели в виду '! ^/Whatever ...' –