2016-07-18 97 views
0

我有多个以.nl .com和.de结尾的域。对于每个域名我有不同的语言。我的文件位于.nl域。我想是所有域如下:简单的htaccess mod重写

这是我的主服务器上(.NL)

RewriteCond %{HTTP_HOST} !www.example.nl$ [NC] 
RewriteRule ^(.*)$ https://www.example.nl/$1 [L,R=301] 

这对于.DE

RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://www.example.de/$1 [L,R=301] 

RewriteCond %{HTTP_HOST} !www.example.de$ [NC] 
RewriteRule ^(.*)$ http://www.example.de/$1 [L,R=301] 
RewriteRule ^(.*)$ http://www.example.nl/$1 [P] 

这对于.COM

RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 

RewriteCond %{HTTP_HOST} !www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 
RewriteRule ^(.*)$ http://www.example.nl/$1 [P] 

我尝试了一切,但我无法弄清楚。

+0

首先将所有请求重写为https,这很容易。因为所有内容都将在www.example.com中设置规则以使用[OR]:RewriteRule ^(。*)$ http://www.example.com/$1 [OR] RewriteRule ^(。*)$ http ://www.example.de/$1。我对[P]代理服务器不熟悉,但好像你没有重定向到代理服务器,只是重定向到.nl域,一个标准的301 – Lizardx

回答

0
# This rule will redirect users from their original location, to the same location but using HTTPS. 
RewriteCond %{HTTPS} !=on 
RewriteRule ^/?(.*) https://www.example.nl/$1 [R=301,L] 

#primary site redirect 
RewriteCond %{HTTP_HOST} !^www\.example\.nl [NC] 
RewriteRule (.*) https://www.example.nl/$1 [R=301,L] 

我相信这是所有的需要,你可以看到,你先重定向不是HTTPS访问https example.nl所有请求,然后重定向任何不www.example.nl到https://www.example.nl

如果我猜错你需要[P],你可以用[P]代替我认为的[R = 301,L],尽管我从来没有处理过这种配置,所以我不能说当然,但它很容易测试。

https://wiki.apache.org/httpd/RewriteHTTPToHTTPS

这或多或少是我们对HTTPS使用。我认为你会感到困惑,并且没有意识到你需要知道的是不是example.nl/$1,没有必要列出所有这些不是,因为它们都不是example.nl/$1

注意以下,这些都是不二法则,都将被重定向:

https://example.nl 
https://www.example.com 
https://example.de 
https://www.example.de 

因为这些都是没有:

https://www.example.nl 

他们重定向。 (。*)表示一切,包括/。

有一个你需要知道与https的微妙的事情,你必须有所有域的所有版本的证书,这是万维网/非www,或者你得到这些浏览器警报弹出窗口的任何初始域/当页面初始加载时没有证书支持的子域。例如,如果您没有example.com的证书,但是您有www.example.com的证书(如果有url):http://example.com您会看到该浏览器警报,这对可用性非常不利,并且使其看起来就像它是一个骗子网站。

我不记得确切的处理顺序,但我认为这就是它的工作原理。