【问题标题】:Htaccess remove string from URL behind last slashHtaccess 从最后一个斜杠后面的 URL 中删除字符串
【发布时间】:2015-10-25 04:58:24
【问题描述】:

寻找解决方案如何删除 URL 最后一个斜杠后面的任何内容。

示例输出网址:

http://example.com/pictures/123/category-name/

此网址要避免的问题:

http://example.com/pictures/123/category-name/blah.html
http://example.com/pictures/123/category-name/blah/blah.html
http://example.com/pictures/123/category-name/blah/blah/blah.html
http://example.com/pictures/123/category-name/blah/
http://example.com/pictures/123/category-name/blah

到目前为止,我有这个:

RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/category-name/$ $1/$2/category-name/ [R]
RewriteRule ([A-Za-z0-9-]+)/([0-9]+)/category-name/(.*)$ category.php?VarA=$1&VarB=$2

它适用于输出 URL 和带有任何模式的 URL。问题是如果最后一个斜杠后面有任何内容,它不会重写(重定向)到输出 URL。

【问题讨论】:

    标签: apache .htaccess url mod-rewrite


    【解决方案1】:

    我个人会使用这样直截了当的逻辑:

    #redirect to canonical url if no ending slash
    RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/category-name$ $1/$2/category-name/ [R,L]
    #redirect to canonical url if anything behind slash
    RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/category-name/(.+)$ $1/$2/category-name/ [R,L]
    #rewrite to PHP file if visiting the canonical url
    RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/category-name/$ category.php?VarA=$1&VarB=$2 [L]
    

    【讨论】:

    • 您好 Ultimater,我将测试您的解决方案。额外的问题:如果输出 URL 是唯一正确的,我应该使用 [R=301] 而不是 [R]?
    • 我会避免永久的 301 重定向,因为由于浏览器缓存问题,它们会使调试变得困难,而且如果域进行了任何形式的大修,您将不得不处理仍然重定向的用户缓存问题。如果出现问题,它们将被重定向到不可预测的地方。在开发过程中,最好始终使用 302 临时重定向。对于生产,我仍然更喜欢临时 302 重定向,因为这意味着我不必担心我是否必须接触代码。不过,对于认真减少带宽使用的网站来说,永久重定向是可以的。
    • 附注[R] 使用默认重定向,即 302。
    • [R] 是否被搜索引擎索引?这对我来说是更重要的因素。
    • Ultimater:忘了说 - 你的解决方案很有魅力 :-) 我欠你多少钱?
    猜你喜欢
    • 2021-02-06
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 2019-02-06
    • 1970-01-01
    • 2016-07-10
    • 2012-12-26
    相关资源
    最近更新 更多