如何删除' www'通过mod_rewrite重定向?

时间:2015-01-28 14:31:53

标签: php .htaccess apache2

我想将https://www.example.com重定向到https://example.com。我跟着this answer,但它不起作用。顺便说一下,ErrorDocument 404也不起作用。

我有什么必须做的?这是我的档案:

<IfModule mod_rewrite.c>
RewriteEngine on  
RewriteBase /

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
AddType application/x-httpd-php html 

ErrorDocument 404 https://kocer.org/index.php?p=notfound
</IfModule>

1 个答案:

答案 0 :(得分:0)

您可以使用:

<IfModule mod_rewrite.c>
    RewriteEngine on  
    RewriteBase /

    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
    RewriteRule ^ http%2://%1%{REQUEST_URI} [NE,L,R=301]
</IfModule>
AddType application/x-httpd-php html 
ErrorDocument 404 /index.php?p=notfound

ErrorDocument Directive
请注意,当您指定指向远程URL的ErrorDocument(即任何方法,例如前面带有http的方法)时,Apache HTTP Server将向客户端发送重定向以告知其在何处查找文档,即使该文档最终位于同一台服务器上。这有几个含义,最重要的是客户端不会收到原始错误状态代码,而是会收到重定向状态代码。这反过来可能会混淆网络机器人和其他尝试使用状态代码确定网址是否有效的客户端。