我有以下一堆域:
在htaccess中编写所有域的最短路径是什么?
答案 0 :(得分:10)
让我们看看这是否有效:
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]
答案 1 :(得分:6)
# 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}
通常,在访问本地托管的网站时,客户端的IP地址为127.0.0.1
。时不时地,它是127.0.1.0
。但整个127.x.x.x
范围是为本地保留的,所以我正在检查所有这些范围,以防你有一个有趣的设置。
这比检查localhost
或检查是否存在.
更安全 - 它还允许您修改/etc/hosts
文件,以便将www.myDomain.com
指向您的nathan.dev.mydomain.com
localhost用于更真实的测试。或者,如果您像我一样,则您拥有域名,例如mydomain.com.dev
或RewriteCond %{HTTP_HOST} !^www\.
。
!
如果域名没有(^
=没有),请以(www.
=开头)RewriteCond %{SERVER_PORT} !^443$
开始......
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
使用端口443是一种更安全的检查,因为在使用负载平衡服务器时无法保证HTTPS环境变量。
www.
这会迫使一切都使用“www”。等效该域名。例如。 mydomain.com成为www.mydomain.com; mydomain.de成为www.mydomain.de。
作为替代方案,您可以使用以下规则强制每个域重定向到.com
以及 RewriteRule ^(.*)$ https://www.myDomain.com/$1 [R=301,L]
:
[OR]
使用两个块,您可以更清楚地了解到底发生了什么。此外,如果要求允许使用任何TLD,则将其写为一个块将不起作用。如果您使用上面的备用规则,则可以将它们组合到一个块中。单块交替看起来像这样(注意添加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]
):
http://mydomain.com
同样值得注意的是,两个块的解决方案有时会导致两个重定向,但如果你按照确切的顺序保留它,你将减少重定向。
示例:使用当前的规则顺序,如果客户端请求www.
,则第一个块将适用(不存在https://www.mydomain.com
)并将重定向到https://mydomain.com
。但是,如果您翻转订单,那么服务器将首先检测到缺少SSL并且客户端将被重定向到www.
,然后服务器将检测到缺少{{1}并提供额外的重定向到https://www.mydomain.com
。 tl; dr:不要改变顺序。 :)
快乐的黑客攻击!
答案 2 :(得分:2)
RewriteCond %{HTTP_HOST} \.
本地主机检查对我来说非常合适而不会破坏我的远程站点上的重定向,我也在寻找这个解决方案。我只需要记住在我的浏览器中输入“localhost”而不是127.0.0.1或192.168.x.x,但这不是约束。很好的解决方案。