Регулярное выражение .htaccess в RewriteRule совпадает, переменные остаются пустыми - PullRequest
0 голосов
/ 24 октября 2010

У меня есть некоторые условия и правила в моем .htaccess:

RewriteCond %{DOCUMENT_ROOT}/assets/img$1/.$2.$4/$3.$4 -f
RewriteRule ^assets/img(.*)/[a-zA-Z0-9-_\.]*\.[^/]+\.[a-z]{2,4}$ assets/img$1/.$2.$4/$3.$4 [NC]
RewriteRule ^assets/img(.*)/[a-zA-Z0-9-_\.]*\.[^/]+\.[a-z]{2,4}$ assets/img/image.php?path=$1&file=$2.$4&template=$3 [NC,L,QSA]

Регулярное выражение корректно (проверено и соответствует, также в этом .htaccess [1]). Переменные $ 1, $ 2, $ 3 и $ 4, тем не менее, пусты. И я не уверен, почему они таковы.

Некоторое время назад я включил каждый сайт с его собственной конфигурацией vhost в / etc / apache2 / sites-available /, но через некоторое время я автоматизировал его с помощью ServerAlias ​​и VirtualDocumentRoot:

ServerAlias *.localhost
VirtualDocumentRoot "/var/www/%1/public"

Это автоматически сопоставленный поддомен.localhost с / var / www / subdomain / public. Кроме того, мне нужно было настроить мой .htaccess. Мне пришлось вставить RewriteBase

RewriteBase /

Это вызвало (я думаю), что мои RewriteRules больше не работали. Это правда? И если да, то как я могу изменить их на работу снова?


PS [1] Я подтвердил это с помощью этого RewriteRule:

RewriteRule ^assets/img(.*)/[a-zA-Z0-9-_\.]*\.[^/]+\.[a-z]{2,4}$ script.php?1=$1&2=$2&3=$3&4=$4 [L]

Когда вы проверяете параметры в скрипте ($ _GET), их ключи существуют в $ _GET, но все они содержат пустые строки.

1 Ответ

0 голосов
/ 26 октября 2010

Я решил свою проблему.В случае, если другие наткнуться на этот вопрос, вот ответ.

Достаточно глупо, я удалил скобки в регулярном выражении.Изменяя это:

[a-zA-Z0-9-_\.]*

на это:

([a-zA-Z0-9-_\.]*)

, оно снова работает!

...