两个URL的Apache重写规则



我正在尝试重定向以下两个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永久重定向。这样可以防止恼人的缓存问题。

最新更新