Переписать строку запроса - PullRequest
0 голосов
/ 26 марта 2010

Я пытаюсь написать некоторые правила для mod_rewrite, чтобы генерировать эскизы на лету. Итак, когда этот URL

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]

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

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2010

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

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 голосов
/ 26 марта 2010

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

RewriteCond %{REQUEST_FILENAME} !-f

'- f' (обычный файл) Обрабатывает TestString как путь и проверяет, существует ли он и является ли он обычным файлом.

RewriteCond

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...