Apache mod_rewrite编码的URL

时间:2009-07-24 14:28:49

标签: regex apache mod-rewrite

我正在开发一个以URL作为参数的网页,并希望它能够被搜索引擎轻松编入索引。一个要求是每个URL都显示为目录。

我的脚本格式为:

myscript?url=<a url>&page=1

我想重定向看起来像:

lookup/<a url>/page:1/

URL可以预见会给我带来麻烦......我只想告诉mod_rewrite在“lookup /”之后和“/ page:”之前选择任何。当然,没有什么比这更简单了。

这是现在的重写:

RewriteEngine on
RewriteRule ^/lookup/(.+)/page:([0-9]+)(/?)$ /myscript?url=$1&page=$2 [L]

这很有效,除非在正确编码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以某种方式忽略查询参数?

1 个答案:

答案 0 :(得分:0)

试试这个:

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路径的一部分,而不是查询的指标。