【问题标题】:Need Help Creating Rewrite Rule需要帮助创建重写规则
【发布时间】:2016-03-12 05:57:01
【问题描述】:

感谢您花时间阅读我的问题!

我目前拥有一家拥有 4000 多个网址的大型电子商务商店。我们正在完成网站的全新、重新平台化版本的开发,不幸的是,这导致我们所有产品的 URL 格式发生了变化。

我不太熟悉用于创建 RewriteRule 以处理以下场景的语法。如果您能帮助我,将不胜感激!

场景:

原网址:http://www.example.com/p-22-some-product-seo-name.aspx

这个网址需要转换成...

新网址:http://www.example.com/some-product-seo-name

请注意,需要删除原始 URL 的第一部分 (p-xx-)。其中xx 是旧 URL 中使用的产品 ID。该 ID 并不总是 2 位数字,长度可能为 1-8 位数字,具体取决于产品。

另外,.aspx 需要从 URL 的末尾删除,只留下连字符的 SEO 名称。

我尝试了以下(以及它的许多变体),但无济于事!

RewriteRule ^p-([^-]*)-([^-]*)\.aspx$ /$2 [R=301, NC]

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    你的表达应该变成如下:

    ^p-([\d]{1,8})-([\w-]+)\.aspx$
    

    第一次捕获允许一到八位数字,第二次捕获允许字母数字字符、下划线和连字符。

    【讨论】:

    • 感谢您的回答,当我将您的建议与声明的其余部分一起插入时,我仍然收到 500 错误。我使用的最后一条语句是:RewriteRule ^p-([\d]{1,2})-([\w-]+)\.aspx$ /$2 [R=301, NC] 抱歉,如果我遗漏了一些明显的东西。我是一名 Windows 专业人士,因此使用 Apache 和 ModRewrite 并不是我最好的技能。注意:我将 8 更改为 2 只是为了测试特定场景,但在使用它时我也遇到了 500 错误。
    • 感谢您的原始答案,我实际上能够找出 500 错误。事实证明,规则的最后一部分格式不正确。我将规则更改为以下内容,它就像一个魅力。 RewriteRule ^p-([\d]{1,8})-([\w-]+)\.aspx$ /$2 [L,R=301,NC]再次感谢您的回答!
    • 啊,是的——我的回答只是改变了你的表达方式,并没有为L 标志做准备。很高兴它现在可以工作了。
    猜你喜欢
    • 2011-09-28
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多