.htaccess -如何以通用方式强制“www.”?

70gysomp  于 2022-11-25  发布在  其他
关注(0)|答案(8)|浏览(455)

这会将domain.example更改为www.domain.example

# Force the "www."
RewriteCond %{HTTP_HOST} !^www\.domain\.example$ [NC]
RewriteRule ^(.*)$ `http://www.domain.example/$1` [R=301,L]

如何替换“域”部分,使其适用于 * 任何 * 域?

o4tp2gmn

o4tp2gmn1#

我会使用以下规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

第一个条件检查 Host 值是否不为空(在HTTP/1.0的情况下);第二个检查 Host 值是否不以www.开始;第三个检查HTTPS(%{HTTPS}onoff,因此%{HTTPS}sonsoffs,并且在ons的情况下,s被匹配)。

nfg76nw0

nfg76nw02#

这样就可以了:

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

v64noz0r3#

如果要将所有对站点的非www请求重定向到www版本,只需将以下代码添加到.htaccess文件中:

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

iaqfqrcu4#

这不适用于子域。
domain.example正确重定向到www.domain.example
但是,
images.domain.example被重定向到www.images.domain.example
不要检查子域是否“不是www”,而是检查是否有两个点:

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
dfuffjeb

dfuffjeb5#

下面的语句应该为没有前缀的请求添加前缀“www”,并将编辑后的请求重定向到新的URI。

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

fhity93d6#

RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

这会将example.com重定向到www.example.com(不包括子域)。

ki1q1bka

ki1q1bka7#

这是一个比较古老的问题,有很多不同的方法可以解决这个问题。恕我直言,最完整的答案可以在这里找到:https://gist.github.com/vielhuber/f2c6bdd1ed9024023fe4。(粘贴和格式化此处的代码不起作用)

o8x7eapl

o8x7eapl8#

这对我来说就像魔术一样

RewriteCond %{HTTP_HOST} ^sitename.example [NC]
RewriteRule ^(.*)$ https://www.sitename.example/$1 [L,R=301,NC]

相关问题