两个 URL 的 Apache RewriteRule

Apache RewriteRule for Two URLs

我正在尝试重定向以下两个 URL:

https://www.example.com/blog/content/Das.com
https://www.example.com/blog/content/page/2

收件人:

https://www.example.com/blog/content

使用:

RewriteEngine on
RewriteRule (blog/content/Das.com|blog/content/page/2) /blog/content [L,R=301]

但它不起作用。我做错了什么?

您确定要将不同请求的 URL 重定向到同一目标 URL 吗?这意味着您将丢失 URL 最初请求的信息。因此,您不能再区分这两个请求。如果您实际上只想在内部重写 那些URL,以便它们可以由同一个控制器处理,那么只需离开下面的R=301 标志。 ..

我个人建议实施两个单独的规则。代码的可读性非常重要,即使不是编写代码的人也应该能够立即理解代码的作用:

RewriteEngine on
RewriteRule ^/?blog/content/Das\.com$ /blog/content [R=301,END]
RewriteRule ^/?blog/content/page/2$ /blog/content [R=301,END]

但如果您更喜欢单一规则,您当然可以将其组合起来:

RewriteEngine on
RewriteRule ^/?blog/content/(?:Das\.com|page/)$ /blog/content [R=301,END]

为此,显然需要将重写模块加载到 http 服务器中。您应该更愿意在实际的 http 服务器的主机配置中实施此类规则。您可以使用分布式配置文件(“.htaccess”),以防您无法控制正常配置,但这会带来性能损失。显然也需要先启用。在这种情况下,您需要将该文件放在 DOCUMENT_ROOT 的顶级文件夹中。

一般来说,最好从 R=302 临时重定向开始,只有在您确定一切按预期工作后才将其更改为 R=301 永久重定向。这样可以防止烦人的缓存问题。