Regex Apache mod_重写编码的URL
我正在开发一个以URL为参数的网页,希望它能被搜索引擎轻松索引。一个要求是每个URL显示为一个目录 我的脚本采用以下格式:Regex Apache mod_重写编码的URL,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我正在开发一个以URL为参数的网页,希望它能被搜索引擎轻松索引。一个要求是每个URL显示为一个目录 我的脚本采用以下格式: myscript?url=<a url>&page=1 这非常有效,除非URL正确编码时失败。以“www.google.com/finance”为例。以下是我在浏览器的地址栏中输入这些URL时发生的情况: #this works lookup/www.google.com/finance/page:1/ #this doesn't work. ur
myscript?url=<a url>&page=1
这非常有效,除非URL正确编码时失败。以“www.google.com/finance”为例。以下是我在浏览器的地址栏中输入这些URL时发生的情况:
#this works
lookup/www.google.com/finance/page:1/
#this doesn't work. url is cut off before the ?
lookup/www.google.com/finance?foo=bar/page:1/
#doesn't match rewrite at all!
lookup/www.google.com%2Ffinance/page:1/
我不知道该怎么做。。。(.+)不应该选择任何内容吗?我是否需要告诉mod_rewrite以某种方式忽略查询参数?尝试以下操作:
RewriteCond %{THE_REQUEST} ^GET\ /lookup/([^\s]+)/page:([0-9]+)/[?\s]
RewriteRule ^/lookup/ /myscript?url=%1&page=%2 [L]
<>但是你确实应该考虑对嵌入的URL进行正确的编码,而不是猜测它可能在哪里结束。所以
/lookup/www.google.com/finance?foo=bar/page:1/
至少应该是/lookup/www.google.com/finance%3Ffoo=bar/page:1/
,所以?
是URI路径的一部分,而不是查询的指示符。我来试一试。谢谢你的及时回复!没有骰子。。。apache不喜欢%2F。当我把它拿出来的时候,它就起作用了。只是要澄清一下:/lookup/www.google.com/finance%3Ffoo=bar/page:1/works,但是/lookup/www.google.com/finance%2Ffoo=bar/page:1/不起作用。
#this works
lookup/www.google.com/finance/page:1/
#this doesn't work. url is cut off before the ?
lookup/www.google.com/finance?foo=bar/page:1/
#doesn't match rewrite at all!
lookup/www.google.com%2Ffinance/page:1/
RewriteCond %{THE_REQUEST} ^GET\ /lookup/([^\s]+)/page:([0-9]+)/[?\s]
RewriteRule ^/lookup/ /myscript?url=%1&page=%2 [L]