gpt4 book ai didi

.htaccess 对除子域之外的所有内容强制使用 "www."并删除尾部斜杠

转载 作者:行者123 更新时间:2023-12-02 20:36:13 24 4
gpt4 key购买 nike

这是我到目前为止所拥有的:

#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]

但是,这会扰乱执行以下重定向的所有子域:

sub.domain.com -> www.sub.domain.com

而且,它还依赖于删除尾部斜杠位上写入的域。

所以...两个问题。

如何重写“删除尾部斜杠”位上的规则以排除在其上写入域?

如何在“强制 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

谢谢!

最佳答案

更改 www 以检查实际域:

#Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

或者,如果您托管多个域,则可以检查 TLD 之前的名称:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^([^.]+)\.([a-z]{2,4})$ [NC]
RewriteRule ^ http://www.%1.%2%{REQUEST_URI} [L,R=301]

对于尾部斜杠,您必须小心,不要针对目录发出请求。因为如果是这样,并且您打开了DirectorySlash(默认情况下它是打开的),那么您将导致重定向循环。

为了排除子域,我们假设第一条规则重定向浏览器以确保它以“www”开头,并且由于子域没有被重定向为以“www”开头,因此我们可以检查一下:

#Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]

关于.htaccess 对除子域之外的所有内容强制使用 "www."并删除尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com