Может ли mod_rewrite сохранить двойную косую черту? - PullRequest
1 голос
/ 20 мая 2009

Я просто изучаю вещи mod_rewrite и regex, и я пытаюсь передать переменные с любым именем, с любым количеством переменных и значений, в сценарий и перенаправить их в другой сценарий.

вот что у меня есть:

RewriteEngine on
RewriteRule ^script\$(.*[\])? anotherscript?ip=%{REMOTE_ADDR}&$1 [L] 

Это все работает, за исключением того, что одним из параметров, которые я передаю, является URL, а // после http: // всегда сокращается до одной косой черты.

например, я делаю

скрипт $ URL = http://www.stackoverflow.com

затем перенаправляет на:

anotherscript ф = 127.0.0.1 & URL = HTTP: /www.stackoverflow.com

и второй сценарий заглушает одиночную косую черту.

Я понимаю, что сохранение двойной косой черты - полная противоположность тому, что люди обычно делают с mod_rewrite. Есть ли способ сохранить двойную косую черту?

EDIT : решение найдено с помощью Gumbo.

RewriteCond %{THE_REQUEST} ^GET\ (.*)/script\$([^\s]+) 
RewriteRule ^script\$(.*) anotherscript?ip=%{REMOTE_ADDR}&%2 [L]

Я должен был добавить это (. *) Перед / script на RewriteCond, как только я это сделал, он избавился от 404 ошибок, и тогда это был просто вопрос прохождения совпадений.

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

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

RewriteCond %{THE_REQUEST} ^GET\ /script\$([^\s]+)
RewriteRule ^script\$.+ anotherscript?ip=%{REMOTE_ADDR}&%1 [L]

См. Diggbar modrewrite - как они передают URL через modrewrite? для объяснения.

1 голос
/ 20 мая 2009

Я думаю, что может быть что-то не так с первой частью вашего регулярного выражения RewriteRule

^script\$(.*[\])?

Обратная косая черта (\) используется для перехода специального символа в буквальный, таким образом, вы на самом деле пытаетесь сопоставить закрывающую скобку (]), это предназначено?

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

RewriteRule ^script\$(.*)? anotherscript?ip=%{REMOTE_ADDR}&$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...