-1

我正在尝试重定向以下两个 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]

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

4

1 回答 1

1

您确定要将不同的请求 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这可以防止烦人的缓存问题。

于 2021-03-18T07:16:14.423 回答