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

我希望将所有传入的urlredirect到我的网站,以便为了规范化目的而将url转换为单个url。

redirect条件应符合

  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

我现在用httpd.conf写的重写规则如下所示

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

有了上述规则,我能够达到第一,第二和第四的规则,但第三条对我不起作用。 任何build议,欢迎。

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

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

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

例如把这些重写放在root配置文件中的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> 

这将保持重写的一致性,并使其易于一次维护和更改

如果你正在谈论SEO的规范化,那么你也应该添加这个元标签到你的网页的头部:

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

这是告诉搜索引擎,无论使用何种网址到达这个网页,这是首选的网址和应该被索引的网址。