web-dev-qa-db-ja.com

.htaccessを使用してハードコーディングせずに非wwwをwwwにリダイレクトする方法

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./にリダイレクトされます。誰が助けることができますか?

5
Lizzy

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]
3
Mark Wagner

要約すると、コードのクリーンでテスト済みのバージョンは次のとおりです。

これは(私にとって)wwwをwww以外にリダイレクトするために機能します

 RewriteEngine On 
 RewriteCond%{HTTPS}!= on 
 RewriteCond%{HTTP_Host} ^ www \。(。+)$ [NC] 
 RewriteRule ^( 。*)$ http://%1/$ 1 [R = 301、L] 

Www以外をwwwにリダイレクトするこれらの作業のいずれか(私にとって)

 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] 
3
cwd
RewriteCond %{HTTP_Host} !^www\.(.+)$ [NC]
RewriteCond %{HTTP_Host} ^(.+)\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%2/$1 [R=301,L]

!は、「www ...」で始まらない場合は、www.%1である(.+)に送信することを意味します。

1
Prix

以下は、Apache2で常に機能してきました。

RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
0
Jim Ekleberry