【问题标题】:htaccess canonical urlhtaccess 规范网址
【发布时间】:2016-04-09 01:56:22
【问题描述】:

我在规范 url 的 mod_rewrite 方面遇到了一点麻烦。这是我当前的 htaccess:

RewriteEngine On
RewriteBase /reads

RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [L]
RewriteRule ^([^/]*)/([^/]*)/?$ view.php?title=$1&chapter=$2 [L]

我正在尝试重写这些网址: website.com/reads/how-to-cook/9 进入 website.com/reads/view.php?title=how-to-cook&chapter=9

在我的 PHP 函数中,调用 view.php?title=xyz 将列出该标题中的所有章节,添加 &chapter=xx 将加载与所选标题对应的章节。

脚本在这些情况下可以正常工作:

website.com/reads/how-to-cook/9
website.com/reads/economy-blah/5/
website.com/reads/good-recipes/

但是这个给出了 404 错误(省略了标题后面的斜杠),请告诉我如何修复错误,非常感谢解释错误可能来自哪里:

website.com/reads/good-recipes

第二个问题(如果这里太贪心请见谅)。怎么转:

website.com/reads/how-to-cook/9
website.com/reads/economy-blah/5/

进入

website.com/reads/how-to-cook/chapter-9
website.com/reads/economy-blah/chapter-5/

使用 mod_rewrite。 谢谢!

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    添加这两行

    RewriteRule ^([^/]*)/([0-9]+)/?$ http://website.com/reads/$1/chapter-$2 [L,R=301]
    RewriteRule ^([^/]*)?$ view.php?title=$1 [NC,L]
    

    第一行更改了回答您第二个问题的网址。本质上,它将用户重定向到新的 url,并且仅在第二个参数是数字时才有效。第二行定义了您的规则中缺少的新条件。完整的重写规则集将如下所示

    RewriteEngine On
    RewriteBase /reads
    
    RewriteRule ^([^/]*)/([0-9]+)/?$ http://website.com/reads/$1/chapter-$2 [L,R=301]
    
    RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [L]
    RewriteRule ^([^/]*)?$ view.php?title=$1 [NC,L]
    RewriteRule ^([^/]*)/([^/]*)/?$ view.php?title=$1&chapter=$2 [L]
    

    【讨论】:

    • 非常感谢。这真的很有帮助。
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多