非wwwからwwwにリダイレクトしないように見えるWebサイトがあります。
私のApache設定は次のとおりです:
RewriteEngine On
### re-direct to www
RewriteCond %{http_Host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
私は何が欠けていますか?
書き換えエンジンの使用は、この問題を解決するためのかなり重い方法です。より簡単なソリューションを次に示します。
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
# real server configuration
</VirtualHost>
そして、実サーバー構成用に<VirtualHost>
を含む別の ServerName www.example.com
セクションがあります。 Redirect
directive を使用する場合、Apacheは/
の後のすべてを自動的に保存します。これは、このメソッドが機能しない理由(実際に機能する場合)についての一般的な誤解です。
http://example.com/subdir/?lold=13666
=> http://www.example.com/subdir/?lold=13666
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
www
WebサイトからURL
を削除するには、.htaccess
ファイルで次のコードを使用します。
RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1$1 [R=301,L]
ウェブサイトwww
でURL
を強制するには、.htaccess
でこのコードを使用します
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^YourSite.com$
RewriteRule ^(.*)$ http://www.yourSite.com/$1 [R=301]
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [R=301,L]
YourSite.com
はURL
に置き換える必要があります。
<VirtualHost *:80>
DocumentRoot "what/ever/root/to/source"
ServerName www.example.com
<Directory "what/ever/root/to/source">
Options FollowSymLinks MultiViews Includes ExecCGI
AllowOverride All
Order allow,deny
allow from all
<What Ever Rules You Need.>
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
これが上記のコードで起こることです。最初の仮想ホストブロックは、リクエストがwww.example.comであるかどうかを確認し、そのディレクトリでWebサイトを実行します。
それに失敗すると、2番目の仮想ホストセクションに到達します。ここでは、www.example.com以外のものはwww.example.comにリダイレクトされます。
ここでの順序は重要です。最初に2番目のvirtualhostディレクティブを追加すると、リダイレクトループが発生します。
このソリューションは、ドメインへのリクエストをwww.yourdomain.comにリダイレクトします。
乾杯!
これは、他の多くの提案に似ていますが、いくつかの機能強化があります。
%{REQUEST_URI}
ルールの影響を無視します。%{REQUEST_URI}
のような以前のRewriteRule
sの影響を受けないパス部分。
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^(.*)$ %{REQUEST_SCHEME}://www.%{HTTP_Host}/$1 [R=301,L]
RewriteCond %{HTTP_Host} ^!example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
これはHTTP_Host
変数で始まります。この変数には、着信URLのドメイン名部分(example.com
)のみが含まれます。ドメイン名にwww.
が含まれておらず、ドメイン名と正確に一致すると仮定すると、RewriteRuleが作用します。パターン^(.*)$
は、REQUEST_URI
内のすべてと一致します。これは、HTTP要求(foo/blah/index.html
)で要求されたリソースです。これを後方参照に保存し、新しいドメイン名(www
で始まる名前)でURLを書き換えるために使用されます。
[NC]
は大文字と小文字を区別しないパターンマッチングを示し、[R=301]
はコード301(リソースを永続的に移動)を使用した外部リダイレクトを示し、[L]
はそれ以上の書き換えをすべて停止し、すぐにリダイレクトします。
これを走らせた...
RewriteEngine on
RewriteCond %{HTTP_Host} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
これは、新しいサーバー上の25以上のドメインでユニバーサルにする必要があるため、このディレクティブは<Directory>タグのvirtual.confファイルにあります。 (dirはすべてのdocrootの親です)
ただし、完全なdocrootがパターンマッチで実行されているため、書き換えルールを少しハックしなければなりませんでした http://httpd.Apache.org/docs/2.2/mod/ mod_rewrite.html は、ホストとポートの後にのみ存在することを示しています。
Www以外=> wwwおよび反対のwww => www以外のリダイレクトコード。 .htaccessファイルにハードコーディングドメインとスキームはありません。したがって、Originドメインとhttp/httpsバージョンは保持されます。
非WWW => WWW:
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
WWW =>非WWW:
RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [R=301,L]
注:%{REQUEST_SCHEME}が利用できないApache 2.2では動作しません。 Apache 2.2との互換性を確保するには、以下のコードを使用するか、%{REQUEST_SCHEME}を固定のhttp/httpsに置き換えてください。
非WWW => WWW:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
...またはそれより短いバージョン...
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
WWW =>非WWW:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
...%Nは最後のRewriteCondからのみ使用可能なため、短いバージョンは使用できません...
Apache 2.4を使用している場合、Apacheモジュールの書き換えを有効にする必要なく、次のようなものを使用できます。
# non-www to www
<If "%{HTTP_Host} = 'domain.com'">
Redirect 301 "/" "http://www.domain.com/"
</If>
次の行は、Apacheディレクティブまたは.htaccessファイルのいずれかに追加できます。
RewriteEngine on
RewriteCond %{HTTP_Host} .
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]
Vhostを変更する場合は、Apacheの変更を適用することを忘れないでください。
(デフォルトのDrupal7 .htaccessに基づいていますが、多くの場合に機能するはずです)
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
これにより、ドメイン名だけでなく、内部のページもリダイレクトされます。
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
これを試して:
RewriteEngine on
RewriteCond %{HTTP_Host} ^example.com$ [NC]
RewriteRule ^(.*) http://www.example.com$1 [R=301]
RewriteEngine On RewriteCond %{HTTP_Host} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
この完璧な作品をチェックしてください
これは簡単です!
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
Redirect permanent
を常に使用しない(または問題が発生する理由)
後でサブドメインを追加する可能性がある場合は、redirect permanent
を使用しないでください。
クライアントがVirtualHost
として登録されていないサブドメインを使用している場合、後でサブドメインが登録された場合でも、このサブドメインに到達しない可能性があるためです。
redirect permanent
はHTTP 301 Moved Permanently
をクライアント(ブラウザー)に送信し、それらの多くはこの応答を(キャッシュが(手動で)クリアされるまで)キャッシュします。したがって、そのサブドメインを使用すると、サーバーを再度要求せずに常にwww。***に自動リダイレクトされます。
参照 ブラウザはどのくらいの時間HTTP 301をキャッシュしますか?
だからRedirect
を使うだけ
<VirtualHost *:80>
ServerName example.com
Redirect / http://www.example.com/
</VirtualHost>
これは私のために働く:
RewriteCond %{HTTP_Host} ^(?!www.domain.com).*$ [NC]
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
Apacheの無限リダイレクトループを回避するために、すべてのドメインをwww
サブドメインにリダイレクトするときに、先読みパターン(?!www.domain.com)
を使用してwww
サブドメインを除外します。
私が使用するコードは:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
私はちょうど同じ問題を抱えています。しかし、これで解決しました
RewriteEngine On RewriteCond %{HTTP_Host} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
このルールは、www以外をwwwにリダイレクトします。
そして、このルールはwwwを非wwwにリダイレクトする
RewriteEngine On RewriteCond %{HTTP_Host} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
参照 http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/