2010-03-26 2 views
0

Я пытаюсь написать некоторые правила mod_rewrite для генерации эскизов на лету. Так что, когда этот URLRewrite Query String

example.com/media/myphoto.jpg?width=100&height=100 

скрипт должен переписать его

example.com/media/myphoto-100x100.jpg 

и если файл существует на диске, он получает обслуживается Apache, и если он не существует, она называется скрипт для генерации файла.

Я написал эту

RewriteCond %{QUERY_STRING}        ^width=(\d+)&height=(\d+) 
RewriteRule ^media/([a-zA-Z0-9_\-]+)\.([a-zA-Z0-9]+)$ media/$1-%1x%2.$2 [L] 
RewriteCond %{QUERY_STRING}        ^(.+)? 
RewriteRule ^media/([a-zA-Z0-9_\-\._]+)$     media/index.php?file=$1&%1 [L] 

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

Мне нужен совет, чтобы закончить этот скрипт.

спасибо.

ответ

0

Попробуйте использовать это для второго условия:

RewriteCond %{REQUEST_FILENAME} !-f 

«-f» (является ли обычным файлом) Лакомства СравниваемаяСтрока как имя пути и тесты, если он существует и является обычным файлом.

RewriteCond

0

Попробуйте эти правила:

RewriteCond %{QUERY_STRING} ^width=(\d+)&height=(\d+)$ 
RewriteCond %{DOCUMENT_ROOT}/media/$1-%1x%2.$2 -f 
RewriteRule ^media/([a-zA-Z0-9_\-]+)\.([a-zA-Z0-9]+)$ media/$1-%1x%2.$2 [L] 
RewriteCond $1 !=index.php 
RewriteRule ^media/([a-zA-Z0-9_\-]+\.[a-zA-Z0-9]+)$ media/index.php?file=$1 [L,QSA] 

Второе условие первых испытаний правил, если существует файл с таким именем (-f).

+0

Это условие выполняется при каждой перенаправлении, даже если uri перезаписан и соответствует: RewriteCond: input = 'width = 100 & height = 100' pattern = '^ width = (\ d +) & height = (\ d +)' = > соответствие – drakoola