【问题标题】:in a .htaccess file, how do you correct multiple features of a url without redirecting each time?在 .htaccess 文件中,如何在不每次重定向的情况下更正 url 的多个功能?
【发布时间】:2014-01-05 16:36:56
【问题描述】:

假设我希望访问我的网站 website.com/something 的人被重定向到:https://www.website.com/something/

我知道如何编写规则来解决这个问题(例如强制 www 和尾部斜杠),但只能一次更正 url。即

website.com/something
-> www.website.com/something
-> https://www.website.com/something
-> https://www.website.com/something/

有没有办法一次性解决所有问题(如果 url 中不存在)以避免所有重定向?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您可以在 DOCUMENT_ROOT/.htaccess 文件中使用此规则:

    RewriteEngine On
    
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{REQUEST_URI} !/$ [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.+?)/?$ https://www.website.com/$1/ [NE,L,R]
    

    说明:

    [OR] 有 3 个条件。这意味着如果以下任何一个条件为真:

    1. 如果 HTTPS 关闭 OR
    2. IF REQUEST_URI 没有斜杠 OR
    3. IF HTTP_HOST 变量不是以 www 开头

    然后进行重定向。

    PS: ^(.+?)/?$ 捕获 REQUEST_URI,而 $1 中的最后一个斜杠不带。

    【讨论】:

    • 您能简单解释一下这是做什么的吗?
    • 是的,确实添加了解释。
    • 感谢您的解释,我只是对一件事感到困惑。您用于没有斜杠的正则表达式对我来说没有意义:^(.+?)/?$`
    • 该正则表达式可以在任何在线正则表达式测试器中进行测试。它基本上使谈话斜线可选,并在不匹配最后一个斜线的情况下捕获文本。
    • 正则表达式似乎匹配所有内容(包括尾部斜杠)......另外,你的意思是最后一个 ` 字符吗?
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2020-11-04
    相关资源
    最近更新 更多