.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
让我们看看这是否有效:
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]