Dun*_*ger 4 .htaccess redirect
这是我到目前为止所拥有的:
#Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.*)$
RewriteRule ^(.+)/$ http://www.domain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
但是,这会扰乱所有执行以下重定向的子域:
sub.domain.com -> www.sub.domain.com
Run Code Online (Sandbox Code Playgroud)
而且,它依赖于删除尾部斜杠位上写的域.
所以...两个问题.
如何在"删除尾部斜杠"位上重写规则以排除在其上写入域?
如何在没有明确写下子域的情况下,在"强制www"上进行重写以排除子域.位?
所需结果的例子 -
sub.domain.com/something/ -> sub.domain.com/something
domain.com/something/ -> www.domain.com/something
www.domain.com/ -> www.domain.com
sub.domain.com -> sub.domain.com
Run Code Online (Sandbox Code Playgroud)
谢谢!
更改www以检查实际域:
#Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Run Code Online (Sandbox Code Playgroud)
或者,如果您托管了一堆域名,则可以在TLD之前检查名称:
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^([^.]+)\.([a-z]{2,4})$ [NC]
RewriteRule ^ http://www.%1.%2%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
对于尾部斜杠,您必须小心不要对目录进行请求.因为如果是,并且您已DirectorySlash打开(默认情况下已打开),那么您将导致重定向循环.
要排除子域,我们假设第一个规则重定向浏览器以确保它以"www"开头,并且由于子域未被重定向为以"www"开头,我们可以检查:
#Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2290 次 |
| 最近记录: |