mod_rewrite可以保留双斜杠吗?

时间:2009-05-20 18:18:17

标签: regex mod-rewrite

我只是学习mod_rewrite和regex的东西,而我正在尝试将任何名称的变量(包含任意数量的变量和值)传递到脚本中并将它们转发到不同的脚本。

这是我到目前为止所做的:

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

除了我传递的一个参数是一个URL而且// http://之后的//总是被剥离为一个斜杠之外,所有这些似乎都有效。

例如,我做

脚本$网址= http://www.stackoverflow.com

然后重定向到:

anotherscript IP = 127.0.0.1&安培; URL = HTTP:/www.stackoverflow.com

并且第二个脚本在单斜杠上窒息。

我意识到保留双斜杠与人们通常使用mod_rewrite完全相反。有没有办法可以保留双斜线?

编辑:在Gumbo的帮助下找到解决方案。

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

我必须在RewriteCond上的/ script前面添加(。*),一旦我这样做它就摆脱了404错误然后只是通过匹配的问题。

2 个答案:

答案 0 :(得分:2)

尝试此规则:

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

有关说明,请参阅Diggbar modrewrite- How do they pass URLs through modrewrite?

答案 1 :(得分:1)

我认为你的RewriteRule正则表达式的第一部分可能有问题

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

反斜杠(\)用于将特殊字符转义为litteral字符,因此您实际上是在尝试匹配一个右括号(]),是否有意?

试试这个

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