www问题和https问题的.htaccess重定向

时间:2017-03-13 16:43:14

标签: .htaccess redirect mod-rewrite

我想重定向两种情况:

  1. WWW
  2. HTTPS
  3. 我目前在.htaccess文件中使用以下内容:

    RewriteEngine on
    
    #RewriteCond %{HTTP_HOST} ^www\.egps\.org [NC]
    #RewriteRule ^(.*)$ https://website.org/$1 [L,R=301]
    
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]  
    

    我注意到前两行因为它们引起了问题。在搜索Stackoverflow寻找答案时,我找到了以下接受的答案:

     RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
     RewriteCond %{HTTPS} !=on
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
     RewriteRule ^(.*)$ https://www.%1%{REQUEST_URI} [L,R=301,NE]
    

    有人可以解释我如何更改此代码以重定向到 NON www 而不是 www

    任何人都可以将这些代码行实际上说的语言翻译成非常简单的语言吗?这是我到目前为止收集的......

    1. 如果网址没有 www
    2. 如果网址前面没有https
    3. 不确定这个
    4. 通过添加HTTPS://www.网址
    5. 重写网址

1 个答案:

答案 0 :(得分:1)

我建议实施两个单独的重定向规则。这样做的好处是它只会导致所有情况下的单个重定向,并且更容易阅读/维护:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,R=301]

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}{REQUEST_URI} [NE,R=301]

第一个条件提取主机名的一部分而没有前导www.

这些规则适用于http服务器主机配置,同样适用于动态配置文件(.htaccess样式文件)。

一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。