dee*_*ell 478 apache mod-rewrite url-rewriting
我想重定向www.example.com到example.com.以下htaccess代码实现了这一点:
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法以通用方式执行此操作而不对域名进行硬编码?
小智 873
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
与迈克尔相同,除了这个有效:P
And*_*ron 109
但是如果我们需要为单独的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]
Run Code Online (Sandbox Code Playgroud)
Dmi*_*riy 71
将非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]
Run Code Online (Sandbox Code Playgroud)
Wil*_*iss 44
如果你想在httpd.conf文件中执行此操作,则可以在没有mod_rewrite的情况下执行此操作(显然它对性能更好).
<VirtualHost *>
ServerName www.example.com
Redirect 301 / http://example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我在这里得到了答案:https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507
Sal*_*n A 33
以下是将www URL重定向到no-www的规则:
#########################
# redirect www to no-www
#########################
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]
Run Code Online (Sandbox Code Playgroud)
以下是将无www URL重定向到www的规则:
#########################
# redirect no-www to www
#########################
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
Run Code Online (Sandbox Code Playgroud)
请注意,我使用NEflag来阻止apache转义查询字符串.如果没有此标志,apache会将请求的URL更改http://www.example.com/?foo%20bar为http://www.example.com/?foo%2250bar
Mic*_*mer 11
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R]
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
如果主机以www开头,我们将整个主机粘贴到URL的起点,然后取下"www".
完整的通用WWW处理程序,http/https
我没有看到完整的答案.我用它来处理WWW包含.
请告诉我这是如何工作的,或者我是否留下了漏洞.
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]
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现,有很多关于htaccess重定向的错误信息.首先,如果您希望此代码能够运行,请确保您的站点在使用Apache的Unix上运行,而不是在Windows主机上运行.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
(确保每行文本之间没有行间距;我在行之间添加了一个额外的空格,以便在此窗口中呈现正常.)
这是一段代码,可用于将您网站的www版本指向http://版本.还可以使用其他类似的代码.
www 到非 www 的 https
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494048 次 |
| 最近记录: |