我只是学习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错误然后只是通过匹配的问题。
答案 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]