Apache Mod将所有传入的URL重写为https:// www

时间:2016-07-28 19:25:22

标签: apache redirect mod-rewrite

我想将所有传入的网址重定向到我的网站,以便用于规范化目的。

以下重定向条件应符合

  1. http://example.com-> https://www.example.com
  2. http://www.example.com - > https://www.example.com
  3. https://example.com - > https://www.example.com
  4. www.example.com - > https://www.example.com
  5. 我在httpd.conf中编写的当前重写规则如下所示

    RewriteEngine On
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L,NE]
    

    根据上述规则,我可以达到第1,第2和第4规则但第3规则对我不起作用。 欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

您网站的HTTPS和HTTP版本的定义必须(?)显示在不同的虚拟主机条目下(除非您在httpd前使用某些代理)。

这使得两个虚拟主机中的配置之间的差异变得容易。确保端口80和端口443的虚拟主机中的重定向配置相同

最简单的方法是使用Include语句并引用两个虚拟主机定义中的公共文件

例如,将这些重写放在根配置dorectory中的文件base-rewrite.inc中(debian / ubuntu中的/etc/apache2/base-rewrite.inc; Redhat中的/etc/httpd/base-rewrite.inc):

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L,NE]

然后在您的虚拟主机定义中,Include此文件:

<VirtualHost *:80>
    # HTTP default virtualhost
    ServerName www.example.com
    DocumentRoot /var/www/html/

    Include base-rewrite.inc
</VirtualHost>

<VirtualHost *:443>
    # HTTPS default virtualhost
    ServerName www.example.com
    DocumentRoot /var/www/html/

    # An example SSL config, but use your certificate files
    SSLEngine on
    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

    Include base-rewrite.inc
</VirtualHost>

这将使重写保持一致,并使其易于维护并立即更改它们

答案 1 :(得分:0)

如果您正在讨论针对搜索引擎优化目的的规范化,那么您还应该将此元标记添加到网页的主题部分:

<link rel="canonical" href="https://www.example.com/" />

这样做可以告诉搜索引擎,无论使用哪个网址到达此网页,这都是首选网址,也是应该编入索引的网址。