【问题标题】:How to fix htaccess with and without trailing slash如何使用和不使用斜杠修复 htaccess
【发布时间】:2015-11-05 05:48:18
【问题描述】:

您好,我遇到了一个很小的问题,当我浏览没有斜杠的网站时,它工作正常,但是当我最后添加斜杠时,它会将我重定向到 404 页面

例如

mysite.com/category/slug-name/page/3/

mysite.com/category/slug-name/page/5/

工作正常,但是当我点击第 1 页时,它有一个斜杠,即

mysite.com/category/slug-name/

它给出错误但没有斜杠它对我来说很好

类似地在文章页面上,当我访问时没有斜杠它可以工作,但是当我最后添加斜杠时,它会将我重定向到 404 页面,例如当我访问此 URL 时,它工作正常

mysite.com/123-article-slug-here

但在这种情况下我得到了 404 错误

mysite.com/123-article-slug-here/

我确定我的 htaccess 有问题,但知道如何解决它

RewriteEngine On
RewriteRule ^category/([a-zA-Z0-9-/]+)/page/(.+)/?$ category.php?id=$1&page=$2 [NC,L]
RewriteRule ^category/([a-zA-Z0-9-/]+)/?$ category.php?id=$1 [L]
RewriteRule ^([a-zA-Z0-9-/]+)/?$ article.php?url=$1

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    尝试从 slug 名称正则表达式分组中删除 / 或使其匹配非贪婪:

    从分组中删除/

    RewriteEngine On
    RewriteRule ^category/([a-zA-Z0-9-]+)/page/(.+)/?$ category.php?id=$1&page=$2 [NC,L]
    RewriteRule ^category/([a-zA-Z0-9-]+)/?$ category.php?id=$1 [L]
    RewriteRule ^([a-zA-Z0-9-]+)/?$ article.php?url=$1
    

    不贪心:

    RewriteEngine On
    RewriteRule ^category/([a-zA-Z0-9-/]+?)/page/(.+)/?$ category.php?id=$1&page=$2 [NC,L]
    RewriteRule ^category/([a-zA-Z0-9-/]+?)/?$ category.php?id=$1 [L]
    RewriteRule ^([a-zA-Z0-9-/]+?)/?$ article.php?url=$1
    

    可能发生的情况是 / 在分组(括号)内得到匹配,并且被传递给您的 category.php,它不喜欢 / 所以返回 404。

    【讨论】:

    • Awesome Non-greedy 对我有用,谢谢,但你能告诉我从分组中删除 / 和非贪婪有什么区别
    • @Brajman 从分组中删除 / 意味着您不能在您的 slug 名称中包含 /,因此:/category/this/is/my-slug/ 将不起作用。但是,如果您使匹配不贪婪,您仍然可以匹配 /,但它不会匹配 末尾的可选斜杠
    • 哦,这对我来说是一个很好的信息。真的真的再次感谢
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多