我想重定向www.example.com
到example.com
.以下htaccess代码实现了这一点:
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
但是,有没有办法以通用方式执行此操作而不对域名进行硬编码?
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
与迈克尔相同,除了这个有效:P
但是如果我们需要为单独的http和https执行此操作:
RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
将非www重定向到www(两者:http + https)
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]
如果你想在httpd.conf文件中执行此操作,则可以在没有mod_rewrite的情况下执行此操作(显然它对性能更好).
ServerName www.example.com Redirect 301 / http://example.com/
我在这里得到了答案:https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507
以下是将www URL重定向到no-www的规则:
######################### # redirect www to no-www ######################### RewriteCond %{HTTP_HOST} ^www\.(.+) [NC] RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]
以下是将无www URL重定向到www的规则:
######################### # redirect no-www to www ######################### RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC] RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
请注意,我使用NE
flag来阻止apache转义查询字符串.如果没有此标志,apache会将请求的URL更改http://www.example.com/?foo%20bar
为http://www.example.com/?foo%2250bar
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^/(.*)$ http://%1/$1 [R]
RewriteCond 在"www" 之后捕获HTTP_HOST变量中的所有内容.并将其保存在%1中.RewriteRule捕获URL(没有前导"/")并将其保存在$ 1中.
试试这个:
RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C] RewriteRule ^www\.(.*)$ http://$1 [L,R=301]
如果主机以www开头,我们将整个主机粘贴到URL的起点,然后取下"www".
完整的通用WWW处理程序,http/https
我没有看到完整的答案.我用它来处理WWW包含.
通用.不需要域信息.
在主域名上强制WWW:www.domain.com
删除子域名上的WWW:sub.domain.com
保留HTTP/HTTPS状态.
允许域/子域的单个cookie
请告诉我这是如何工作的,或者我是否留下了漏洞.
RewriteEngine On RewriteBase / # Force WWW. when no subdomain in host RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC] RewriteCond %{HTTPS}s ^on(s)|off [NC] RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # Remove WWW. when subdomain(s) in host RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTPS}s ^on(s)|off [NC] RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC] RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
我发现,有很多关于htaccess重定向的错误信息.首先,如果您希望此代码能够运行,请确保您的站点在使用Apache的Unix上运行,而不是在Windows主机上运行.
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
(确保每行文本之间没有行间距;我在行之间添加了一个额外的空格,以便在此窗口中呈现正常.)
这是一段代码,可用于将您网站的www版本指向http://版本.还可以使用其他类似的代码.