【问题标题】:A better way to URL Rewrite this .htaccessURL 重写此 .htaccess 的更好方法
【发布时间】:2015-01-18 19:28:50
【问题描述】:

我想知道是否有更好的方法来做到这一点。它正在执行以下操作:

A) 将 mydomain.uk 路由到 www.mydomain.uk

B) 将任何非 http 的内容路由到 https://www.mydomain.uk

我不太使用基于 linux 的服务器,所以我确信有更好的方法来做到这一点。最终结果应该是任何基本 url 应该以 https://www.mydomain.uk

结尾

代码如下

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{HTTP_HOST} ^mydomain.uk$
RewriteRule ^/?$ "https\:\/\/www\.mydomain\.uk\/" [R=301,L]

【问题讨论】:

    标签: linux apache .htaccess ssl url-rewriting


    【解决方案1】:

    这两条规则可以很容易地合二为一:

    RewriteEngine On
    
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.mydomain.uk%{REQUEST_URI} [L,R=301,NE]
    

    【讨论】:

    • 非常感谢您的回答,但在我未经训练的 linux 眼中,我想知道这两个不同(ish)答案的作用是否有任何区别,以及是否有更好的方法。
    • 好吧,如果您没有多个域名指向同一个DocumentRoot,那么此规则无需在规则中对主机名进行两次硬编码。 (如果您愿意,甚至可以消除这种单一的硬编码)。
    【解决方案2】:

    您可以使用OR

    RewriteEngine On
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^mydomain.uk$
    RewriteRule (.*) https://www.mydomain.uk%{REQUEST_URI} [R,L]
    

    规则RewriteCond %{HTTP_HOST} ^mydomain.uk$ 也可以更加严格,并捕获任何不是www.mydomain.uk 的主机。

    【讨论】:

    • 非常感谢您的回答,但在我未经训练的 linux 眼中,我想知道这两个不同(ish)答案的作用是否有任何区别,以及是否有更好的方法。
    • 两者都是正确的。 @anubhava 是一种“重定向所有不匹配的内容”的方法,我的是一种“仅在匹配时重定向”。
    • 我通常建议使用他的方法,除非将规则放置在可以使用不同主机名提供服务的虚拟主机中,并且您只关心将非 www 重定向到 www。某些共享托管服务可能会出现这种情况,这些服务将子域映射到主域内的文件夹中(例如 CPanel 曾经做过)。
    • 谢谢@Simone-Carletti 我认为两者都可以标记为答案,但是当我使用你的答案时,我会选择那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    相关资源
    最近更新 更多