Помощь по шаблону регулярных выражений (у меня это почти есть, просто нужно немного опыта, чтобы закончить) - PullRequest
1 голос
/ 30 апреля 2010

Мне нужно сопоставить два случая

js/example_directory/example_name.js 

и

js/example_directory/example_name.js?12345  

(где 12345 - это строка цифр неизвестной длины, а каталог может быть безграничным по глубине или вообще не существовать)

Мне нужно захватить в обоих случаях все между js/ и .js
и , если ? существует, захватить цифровую строку после ?

Это то, что я имею до сих пор

^js/(.*).js\??(\d+)?

Это работает, кроме как также захватывает

js/example_directory/example_name.js12345 

Я хочу, чтобы регулярное выражение игнорировало это. Есть предложения?
Спасибо всем!

Проверьте свои шаблоны здесь

Ответ:
Используя информацию Гамбо, мое последнее правило переписывания выглядит следующим образом.

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteBase /
 RewriteCond %{SCRIPT_FILENAME} !-d
 RewriteCond %{SCRIPT_FILENAME} !-f
 RewriteCond %{QUERY_STRING} ^\d*$
 RewriteRule ^js/(.*)\.js$ js.php?f=$1.js&v=%0 [L]
</IfModule>

Ответы [ 3 ]

4 голосов
/ 30 апреля 2010

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

^js/(.*).js(\?\d+)?
3 голосов
/ 30 апреля 2010

директива RewriteRule mod_rewrite проверяет только путь URI, а не запрос. Таким образом, использование правила, подобного следующему, уже соответствует обоим URI:

RewriteRule ^js/(.*)\.js$ …

Если вы теперь хотите проверить запрос, вам нужно использовать дополнительный RewriteCond:

RewriteCond %{QUERY_STRING} ^\d*$
RewriteRule ^js/(.*)\.js$ …

Совпадение последнего успешного RewriteCond может указываться с помощью %n, поэтому в случае полного совпадения %0 или в этом случае даже просто %{QUERY_STRING} напрямую.

1 голос
/ 30 апреля 2010

Что касается регулярных выражений - вы можете использовать (?:) (без захвата группировки), чтобы сделать \? (\ D +) в качестве чанка, необязательно, например, так:

^js/(.*).js(?:\?(\d+))?

Вам действительно не нужно> использовать <1005 * (без захвата), но <em>, если вы не , обратные ссылки будут изменены - 1 будет указывать на имя файла, 2 будет указывать на ?1234, а 3 будет 1234

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