Обнаружение двойной косой черты (пустой параметр) в request_uri - PullRequest
2 голосов
/ 24 декабря 2010

Связано 1 2 3

Но этот вопрос немного отличается.

Скажите, что у меня RewriteRule, как:

RewriteRule ^test/([\w]*)/([\w]*)/([\w]*)/?$ go.php?q=THREE_$1_$2_$3

Итак, http://localhost/test/a/b/c переписывается в http://localhost/go.php?q=THREE_a_b_c

Теперь скажите, что я хочу явно перехватить условие, когда опущен средний параметр и получен двойной слеш, как http://localhost/test/a//c

Поэтому я пишу правило, например:

RewriteRule ^test/([\w]*)//([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

НО ALAS , правило никогда не совпадает, кажется, RewriteRule не видитдвойная косая черта , хотя двойная косая черта сохраняется в %{THE_REQUEST} и %{REQUEST_URI}.

Так что я пишу правило, например:

RewriteCond %{REQUEST_URI} //
RewriteRule ^test/([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(NONE)_$2

и , что работает, потому что RewriteCond применяется, только если в REQUEST_URI есть двойная косая черта.Но, как вы можете видеть, я все еще должен предположить, что при синтаксическом анализе с регулярным выражением там НЕТ двойной косой черты.

Все это очень мешает, потому что я думал, что RewriteRule работает на% {REQUEST_URI}, но, оказывается, не , он работает на чем-то другом (версия с двойной косой чертой ..?)

Мой вопрос на самом деле: если не raw% {REQUEST_URI}, то что же дает RewriteRule?

1 Ответ

0 голосов
/ 24 декабря 2010

Не уверен насчет этого, но ваше второе правило:

RewriteRule ^test/([\w]*)//([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

, похоже, пытается найти URL-адрес, подобный этому:

http://localhost/test/a//b/c

или вот так:

http://localhost/test/a///c

Если вы измените второе правило на:

RewriteRule ^test/([\w]*)//([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

, оно должно работать.

Редактировать:

Реальный ответ !

Apache удаляет пустые сегменты пути

Теперь я знаю, что проблема не в неправильном регулярном выражении, я искал ответ.

...