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

标签 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。

这意味着以下 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

有什么想法吗?

最佳答案

使用此规则 - 它将使第 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]

此规则会将所有这些 URL 视为相同(将重定向到相同的 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
  1. 我已在模式中将 A-Za-z 替换为 a-z,因为您已经有 [NC] 标志(忽略大小写)。

  2. 请记住,从 SEO 的角度来看,此类 URL 通常并不好 - 我强烈建议使用 <link rel="canonical" href="PROPER_URL" /> 指定正确的 URL,以避免搜索引擎对重复内容进行惩罚:

  3. 该“可选”部分将丢失/不会按照请求传递到新 URL。

关于apache - URL 中的可选参数 - 重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979176/

相关文章:

node.js - Apache、NodeJs、服务器发送事件

javascript - 使用 htaccess 从父目录加载 CSS、JavaScript、图像

php - 是否可以使用 .htaccess 更改子域的目录?

.htaccess - 删除扩展名后重写动态 url

javascript - Laravel:我在使用 Ajax 发布数据时遇到一些问题

javascript - JSON响应优化

Apache 虚拟主机不适用于子域

.htaccess - ISAPI 重写查询字符串

Wordpress 永久链接结构更改问题

php - mod_rewrite 添加尾部斜杠