【问题标题】:How to redirect part of a URL using regex?如何使用正则表达式重定向部分 URL?
【发布时间】:2019-06-04 14:22:40
【问题描述】:

所以我有点麻烦。

我有许多产品的 URL 部分与我最近更改的相同:

https://www.website.com/shop/category-sample/product1/
https://www.website.com/shop/category-sample/product2/
https://www.website.com/shop/category-sample/product3/
https://www.website.com/shop/category-sample/product4/

我需要“category-sample”为“category”

所以新的 URL 应该是这样的:

https://www.website.com/shop/category/product1/

等等

谢谢!

【问题讨论】:

  • 什么网络服务器?你有 mod_rewrite 吗?
  • 对不起,我应该更清楚。我正在通过 Kinsta 托管 wordpress,因此它在 Nginx 上提供服务。我确实安装了 Yoast,但是我不确定如何使用他们的正则表达式重定向来设置它。

标签: regex redirect url-rewriting url-redirection


【解决方案1】:

假设您使用的是加载了重写模块的典型 apache http 服务器,这应该可以满足您的需求:

RewriteEngine on
RewriteRule ^/?shop/category-sample/(.*)$ /shop/category/$1 [R=301,QSA,END]

如果“类别”实际上是一个动态值,而不是一个固定的文字,这个变体应该满足你的要求:

RewriteEngine on
RewriteRule ^/?shop/(.+)-sample/(.*)$ /shop/$1/$2 [R=301,QSA,END]

如果您必须使用这些规则,该规则同样适用于动态配置文件(“.htaccess”样式文件)中的 http 服务器主机配置。

如果您使用这些规则收到“内部服务器错误”(http 状态 500),那么您很可能操作的是非常旧版本的 apache http 服务器。然后尝试使用L 标志而不是较新的END 标志。在这种情况下,您会在您的 http 服务器错误日志文件中找到相应的提示。

一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 2020-03-28
    • 2017-01-05
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多