mod_rewrite可以保留双斜杠吗?
问题描述:
我只是在学习mod_rewrite和正则表达式的东西,我想要做的是将任何名称的变量,包括任意数量的变量和值传递给脚本,并将它们转发给不同的脚本。mod_rewrite可以保留双斜杠吗?
这里是我到目前为止有:
RewriteEngine on
RewriteRule ^script\$(.*[\])? anotherscript?ip=%{REMOTE_ADDR}&$1 [L]
这一切似乎除了我传递的参数是一个工作是一个URL和http后//://总是被剥离下来以一个斜线。
例如,我做
脚本$ URL = 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,一旦我这样做,它摆脱了404个错误,然后它只是一个通过传递匹配的问题。
答
试试这个规则:
RewriteCond %{THE_REQUEST} ^GET\ /script\$([^\s]+)
RewriteRule ^script\$.+ anotherscript?ip=%{REMOTE_ADDR}&%1 [L]
的说明,请参见Diggbar modrewrite- How do they pass URLs through modrewrite?。
答
我觉得有可能是坏了你的重写规则的正则表达式的第一部分
^script\$(.*[\])?
反斜线(\
)用来转义特殊字符变成litteral一个,因此你实际上是试图匹配一个结束括号(]
),是否打算?
试试这个
RewriteRule ^script\$(.*)? anotherscript?ip=%{REMOTE_ADDR}&$1 [L]
这是导致404找不到 – nerdabilly 2009-05-20 18:49:52
希望你没有忘记强制性`RewriteEngine叙述on`。 – Gumbo 2009-05-20 19:13:48