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
を否定する場合(!
)キャプチャしないので%1
は空です。 2つの可能な解決策:
ダミーRewriteCond
:
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteCond %{HTTP_Host} ^(.+)$ [NC]
RewriteRule ^/(.*)$ http://www\.%1/$1 [R=301,L]
%{HTTP_Host}
in RewriteRule
:
RewriteCond %{HTTP_Host} !^www\.(.+)$ [NC]
RewriteRule ^/(.*)$ http://www\.%{HTTP_Host}/$1 [R=301,L]
要約すると、コードのクリーンでテスト済みのバージョンは次のとおりです。
RewriteEngine On RewriteCond%{HTTPS}!= on RewriteCond%{HTTP_Host} ^ www \。(。+)$ [NC] RewriteRule ^( 。*)$ http://%1/$ 1 [R = 301、L]
RewriteCond%{HTTP_Host}!^ www \。(。+)$ [NC] RewriteRule ^(。*)$ http:// www \。%{HTTP_Host}/$ 1 [R = 301、L]
または
RewriteCond%{HTTP_Host}!^ www \。 [NC] RewriteCond%{HTTP_Host} ^(。+)$ [NC] RewriteRule ^(。*)$ http:// www \。%1/$ 1 [R = 301、 L]
RewriteCond %{HTTP_Host} !^www\.(.+)$ [NC]
RewriteCond %{HTTP_Host} ^(.+)\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%2/$1 [R=301,L]
!
は、「www ...」で始まらない場合は、www.%1
である(.+)
に送信することを意味します。
以下は、Apache2で常に機能してきました。
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]