mod_rewrite: найти файл на основе регулярного выражения - PullRequest
0 голосов
/ 23 апреля 2011

Я хотел бы использовать mod_rewrite для перенаправления на страницу, если я могу найти файл на основе шаблона, определенного из URI

Путь к файлу для сопоставления

/path/to/dir/cat1_cat2_cat3

HTTP-запрос

http://example.com/cat1/cat2/cat3

Конфигурация mod_rewrite:
-1-я строка: извлечение cat1, cat2 и cat3 с регулярными выражениями
Вторая строка: попытка сопоставить файл с помощью переменных регулярного выражения
-3-я строка: если совпадение успешно, перенаправление на страницу

RewriteCond %{QUERY_STRING} ^/(.*)/(.*)/(.*)$
RewriteCond /path/to/dir/$1_$2_$3 -f
RewriteRule /some_page.html

По какой-то причине это не работает. Любая помощь приветствуется.

1 Ответ

2 голосов
/ 23 апреля 2011

Попробуйте это:

RewriteCond /path/to/dir/$1_$2_$3 -f
RewriteRule ^/(.*)/(.*)/(.*)$ /some_page.html

Строка RewriteCond оценивается после того, как mod_rewrite увидит, что RewriteRule совпадает, поэтому вы можете использовать значения $N.

Ваша оригинальная версия тоже сработала бы, за исключением того, что вы сравнивались с QUERY_STRING, который является частью после ? в запросе - вы, вероятно, имели в виду REQUEST_URI; Вы должны были использовать %N, чтобы вернуться к предыдущему RewriteCond; и вам не хватало части шаблона RewriteRule.

...