.htaccess HTACCESS重写cond而不破坏本地主机

.htaccess HTACCESS重写cond而不破坏本地主机,.htaccess,redirect,.htaccess,Redirect,我有以下一组域: myDomain.de myDomain.com myDomain.co.za myDomain.org myDomain.com myDomain.com.na 在htaccess中写入,使所有域 重定向到。即,无论输入的域是什么,它都将添加www并重定向到https,以及 仍然在我的本地机器上工作(这样,如果有人输入,它就不会重定向到www站点了 让我们看看这是否有效: RewriteEngine On # Check if the host name contain

我有以下一组域:

  • myDomain.de
  • myDomain.com
  • myDomain.co.za
  • myDomain.org
  • myDomain.com
  • myDomain.com.na
在htaccess中写入,使所有域

  • 重定向到。即,无论输入的域是什么,它都将添加www并重定向到https,以及
  • 仍然在我的本地机器上工作(这样,如果有人输入,它就不会重定向到www站点了

  • 让我们看看这是否有效:

    RewriteEngine On
    
    # Check if the host name contains a . (localhost won't)
    # Check if the host name starts with www
    # Check if the host name ends with .com
    # Check if the connection is secure
    RewriteCond %{HTTP_HOST}  \.
    RewriteCond %{HTTP_HOST} !=svn.myDomain.com
    RewriteCond %{HTTP_HOST} !^www   [OR]
    RewriteCond  %{HTTP_HOST} !\.com$ [OR]
    RewriteCond %{HTTPS}     !=on
    RewriteRule ^.*$ https://www.myDomain.com/$0 [R=301,L]
    
    localhost检查在不破坏远程站点重定向的情况下非常适合我,我也在寻找此解决方案。我只需记住在浏览器中输入“localhost”,而不是127.0.0.1或192.168.x.x,但这不是一个约束。很好的解决方案。

    一个简单的解决方案: 让我们把它分解一下。 如果请求客户端不在保留的本地主机IP地址上 通常,当访问本地托管的网站时,客户端的IP地址是
    127.0.0.1
    。偶尔,它是
    127.0.1.0
    。但是整个
    127.x.x
    范围是为本地保留的,所以我会检查所有这些地址,以防您有一个有趣的设置

    这比检查
    localhost
    或检查
    是否存在更安全——它还允许您编辑
    /etc/hosts
    文件,将
    www.myDomain.com
    指向您的localhost进行更实际的测试。或者,如果您像我一样,您有一个域命名法,如
    nathan.dev.myDomain.com
    mydomain.com.dev

    检查“www.” 如果域不(
    =不)以(
    ^
    =以开头)
    www.

    端口443 vs HTTPS环境变量 使用端口443是一种更安全的检查,因为在使用负载平衡服务器时无法保证HTTPS环境变量

    实际规则 这将强制所有内容使用该域的“www.”等价物。例如,mydomain.com变为www.mydomain.com;mydomain.de变为www.mydomain.de

    或者,您可以使用以下规则强制每个域重定向到
    www.
    以及
    .com

    RewriteRule ^(.*)$ https://www.myDomain.com/$1 [R=301,L]
    
    两个条件/规则块,而不是一个。 使用两个块,您可以更清楚地了解到底发生了什么。此外,如果要求允许使用任何TLD,那么将其写成一个块根本不起作用。如果使用上述替代规则,您可以将它们组合成一个块。一个块替代规则如下所示(注意添加了
    [或]
    ):

    还值得注意的是,双块解决方案有时会导致两个重定向,但是如果按正确的顺序保留,则会减少重定向

    示例:如果客户端请求
    http://mydomain.com
    ,将应用第一个块(不存在
    www.
    )并将重定向到
    https://www.mydomain.com
    。但是,如果您翻转订单,服务器将首先检测到缺少SSL,客户端将重定向到
    https://mydomain.com
    ,则服务器将检测到
    www.
    的缺失,并提供到
    https://www.mydomain.com
    .tl;dr:不要更改顺序。:)


    Happy hacking!

    它很有效,但现在每次我尝试使用svn.mydomain.com签出任何内容时,它都会说无法签出,因为有一个永久重定向到https。如果此人正在访问svn.mydomain.com,我如何跳过这些规则?我添加了另一个条件,看看这是否解决了问题。
    # If not on www., redirect to www. on SSL
    RewriteCond %{REMOTE_ADDR} !127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
    RewriteCond %{HTTP_HOST} !^www
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
    
    # If not on SSL(ish), redirect to SSL
    RewriteCond %{SERVER_PORT} !^443$
    RewriteCond %{REMOTE_ADDR} !127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    
    RewriteCond %{REMOTE_ADDR} !127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
    
    RewriteCond %{HTTP_HOST} !^www\.
    
    RewriteCond %{SERVER_PORT} !^443$
    
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
    
    RewriteRule ^(.*)$ https://www.myDomain.com/$1 [R=301,L]
    
    RewriteCond %{REMOTE_ADDR} !127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
    RewriteCond %{HTTP_HOST} !^www [OR]
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://www.myDomain.com/$1 [R=301,L]