对于我的一个客户,我尝试了不同版本的.htaccess
规则,将所有“非www”URL转发/重定向到相应的www。
我现在的.htaccess
如下:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# Redirection from non-www to www ---> latest rule used
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
AddHandler application/x-httpd-php81 .php .php5 .php4 .php3
所以...
我尝试了3个不同的规则没有任何结果(除了有一个301的主页只)。我的主机是SG。任何想法/帮助?
我尝试了不同的规则,就像上面发布的那样:
测试1(同上)
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
测试二
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
测试三
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
没什么可做的,这些规则都不能帮助我将所有非www网址重定向到www网址。
1条答案
按热度按时间5lwkijsr1#
你把规则放错了地方。这个“重定向”规则需要放在
.htaccess
文件的顶部,* 在 * WordPress代码块之前(重写到WP前端控制器),即 * 在 *# BEGIN WordPress
注解标记之前。否则,您的任何“测试”都可以工作,尽管您在“test 2”中错误地重定向到
http
(而不是https
)。您不需要在这里重复RewriteEngine On
指令(这已经在.htaccess
文件中发生了 * 稍后 *-在WordPress代码块中)。首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
通过将规则放置在文件的末尾(即. after the WordPress front-controller pattern),那么它只会被处理为“主页”和静态资产-内部WordPress页面将不会被重定向。(“主页”,即根目录和静态资产不会被WordPress代码块处理,因此处理会下降到末尾的规则。