Apache-2.2

如何使用.htaccess將非www重定向到www而不進行硬編碼?

  • August 24, 2018
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

…導致從“www 到非 www”的完美、非硬編碼 301 重定向,完全相反的情況會是什麼樣子?

編輯:

根據 Prix 的文章,我已將.htaccess文件更改為以下內容:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{HTTPS} !=on
 RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
 RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
</IfModule>

如前所述,http://www./不幸的是,這重定向到。誰能幫忙?

Prix​​ 幾乎擁有它。當您否定RewriteCond(with !) 時,它不會擷取,所以%1是空的。兩種可能的解決方案:

假人RewriteCond

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

%{HTTP_HOST}RewriteRule

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

總之,一個乾淨的、經過測試的程式碼版本:

這適用於(對我而言)將 www 重定向到非 www

重寫引擎開啟
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
重寫規則 ^(.*)$ http://%1/$1 [R=301,L]

這些工作中的任何一項(對我來說)都可以將非 www 重定向到 www

RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
重寫規則 ^(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]

或者

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
重寫規則 ^(.*)$ http://www\.%1/$1 [R=301,L]

引用自:https://serverfault.com/questions/190589