mod_rewrite可以保留双斜杠吗?

问题描述:

我只是在学习mod_rewrite和正则表达式的东西,我想要做的是将任何名称的变量,包括任意数量的变量和值传递给脚本,并将它们转发给不同的脚本。mod_rewrite可以保留双斜杠吗?

这里是我到目前为止有:

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

这一切似乎除了我传递的参数是一个工作是一个URL和http后//://总是被剥离下来以一个斜线。

例如,我做

脚本$ URL = http://www.*.com

然后将其重定向到:

anotherscript IP = 127.0.0.1 & URL = HTTP:/www.*.com

和单斜杠上的第二个脚本扼流圈。

我意识到,保留双斜杠与人们通常用mod_rewrite做的事完全相反。有没有办法保留双斜线?

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

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

我不得不补充说,(*)在/脚本前面的的RewriteCond,一旦我这样做,它摆脱了404个错误,然后它只是一个通过传递匹配的问题。

试试这个规则:

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

的说明,请参见Diggbar modrewrite- How do they pass URLs through modrewrite?

+0

这是导致404找不到 – nerdabilly 2009-05-20 18:49:52

+0

希望你没有忘记强制性`RewriteEngine叙述on`。 – Gumbo 2009-05-20 19:13:48

我觉得有可能是坏了你的重写规则的正则表达式的第一部分

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

反斜线(\)用来转义特殊字符变成litteral一个,因此你实际上是试图匹配一个结束括号(]),是否打算?

试试这个

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