URL中的可选参数 - 重写规则

时间:2011-08-08 07:58:40

标签: apache .htaccess mod-rewrite apache2.2

我不知道“可选参数”这个词是否正确描述了我的情况。这就是我需要的。

我为URL重定向编写了以下规则:

RewriteRule ^product/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ product/?sid=$2&pid=$3&title=$1&src=$4 [NC,L]

基本上,这会重定向类似

的内容
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy

类似

http://localdomain.com/product/?sid=abc123&pid=def456&title=Golf-Bats&src=stringy

我想要做的是编写一个规则,该规则接受额外的/可选的/可能无限数量的参数(//类型构造),但仍然重定向到相同的URL。

这意味着以下网址:

http://localdomain.com/product/Golf-Bats/abc123/def456/stringy
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2/rand3
etc.

应该只指向URL

http://localdomain.com/product/?sid=abc123&pid=def456&title=Golf-Bats&src=stringy

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用此规则 - 它将使第6个和更多路径段“可选”:

RewriteRule ^product/([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)(/.*)?$ product/?sid=$2&pid=$3&title=$1&src=$4 [NC,L]

此规则会将所有这些网址视为相同(将重定向到同一网址):

http://localdomain.com/product/Golf-Bats/abc123/def456/stringy
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2/rand3
  1. 我已在模式中将A-Za-z替换为a-z,因为您已经有[NC]标记(忽略大小写)。

  2. 请注意,从SEO的角度来看,这种类型的网址一般都不好 - 我强烈建议您使用<link rel="canonical" href="PROPER_URL" />指定正确的网址,以避免搜索引擎对内容造成重复损失:

  3. 根据要求,“可选”部分将丢失/不会传递到新网址。