2013-03-03 2 views
4

Использование переписывания модема .htaccess, я хотел бы переписать URL-адрес, проверить, существует ли этот файл, и если он не переписывается снова на другой URL-адрес, используя часть исходного URL-адреса, которая была удалена во время первая переписывается.htaccess переписать только в том случае, если файл не существует

Например, если исходный URL это

/images/3001/zebra.jpg

Я хотел бы, чтобы проверить, существует ли файл /images/cached/zebra.jpg и обслуживать его, если он существует.

И если я не хотел бы переписать /image.php?id=3001

Большое спасибо, Phil

+0

Я не думаю, что 'mod_rewrite' способен на это. Ваш скрипт 'image.php' должен проверить вас. Если он существует, он должен обслуживать кешированную версию, иначе он должен служить оригиналу и кэшировать его. Затем создайте переписку для этого скрипта, если вы хотите * подделать * URI. –

+0

Спасибо за ваш ответ. В настоящее время мой php-скрипт проверяет, как вы описали, но это означает, что php обрабатывает запрос. Я надеялся, что для сервера будет более эффективно пропустить php, если это возможно. – user2128200

ответ

3

В файле Htaccess в корневом каталоге, добавьте эти правила перед любыми правилами возможно, у вас уже есть:

RewriteEngine On 

# cached copy exists 
RewriteCond %{REQUEST_URI} ^/images/[0-9]+/(.+)$ 
RewriteCond %{DOCUMENT_ROOT}/images/cached/%1 -f 
RewriteRule^/images/cached/%1 [L] 

# cached copy doesn't exist 
RewriteCond %{REQUEST_URI} ^/images/([0-9]+)/(.+)$ 
RewriteCond %{DOCUMENT_ROOT}/images/cached/%2 !-f 
RewriteRule^/image.php?id=%1 [L] 
+0

спасибо, Джон, ты просто спас мне день. – codefreak

Смежные вопросы