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]
何が欠けていますか?
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>
セクションがもう1つありServerName www.example.com
ます。Apache /
は、Redirect
ディレクティブを使用した後、自動的に何も保存します。これは、このメソッドが機能しない理由(実際には機能する)に関する一般的な誤解です。
www.example
とexample
、彼らはサンプルに表示されますどこ。
Redirect 301 / http://example2.com/extra/
場合、リダイレクトすると、末尾のスラッシュexample.com/blah
が失われexample2.com/extrablah
ます。つまり、に移動します。何か案は?(Apache 2.2.22)
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]
example.com/subdi1/ws/*
wwwなしで通過するようにしますか?
s
3行目のhttpにを追加するだけです。
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
www.
れていServerAlias
ますか?
ウェブサイトwww
から削除するに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}
ルールの影響を無視します。パス部分は以前RewriteRule
のような影響を受けません%{REQUEST_URI}
。
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
)のドメイン名部分のみを含む変数から始まります。ドメイン名にaが含まれておらず、ドメイン名www.
と完全に一致すると仮定すると、RewriteRuleが機能します。パターン^(.*)$
はREQUEST_URI
、HTTPリクエスト(foo/blah/index.html
)でリクエストされたリソースであるのすべてに一致します。これは後方参照に保存され、新しいドメイン名(で始まるものwww
)でURLを書き換えるために使用されます。
[NC]
大文字と小文字を区別しないパターンマッチングを示します。 [R=301]
示し、コード301(リソースが永続的に移動される)を使用した外部リダイレクトを示し、[L]
それ以降のすべての書き換えを停止し、すぐにリダイレクトします。
www以外の=> wwwと反対のwww => www以外の両方のリダイレクトコード。.htaccessファイルにドメインとスキームをハードコーディングしていません。したがって、元のドメインとhttp / httpsバージョンは保持されます。
非WWW => WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW => NON-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 => NON-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からしか使用できないため、短いバージョンは使用できません...
私はこれを実行しました...
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
これは、新しいサーバーの25以上のドメインで共通にする必要があるため、このディレクティブは<Directory>タグのvirtual.confファイルにあります。(dirはすべてのdocrootの親です)
しかし、http://httpd.apache.org/docs/2.2/mod/mod_rewrite.htmlが言っていることにもかかわらず、完全なdocrootがパターンマッチで実行されていたので、書き換えルールを少しハックする必要がありました。ホストとポートの後にのみ存在することについて。
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]
仮想ホストを変更する場合は、Apacheの変更を適用することを忘れないでください。
(デフォルトのDrupal7 .htaccessに基づいていますが、多くの場合動作するはずです)
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
これは、ドメイン名だけでなく、内側pages.likeないだけをリダイレクトします...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
常に使用しないでください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>
私は同じ問題を抱えています。しかし、これで解決しました
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/から参照してください
これは私にとってはうまくいきます:
RewriteCond %{HTTP_HOST} ^(?!www.domain.com).*$ [NC]
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
Apacheで無限リダイレクトループを回避するために、すべてのドメインをサブドメインにリダイレクトするときに(?!www.domain.com)
、先読みパターンを使用してwww
サブドメインを除外しますwww
。
私が使用するコードは次のとおりです。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
-複数のドメイン名をホストしている場合(オプション)
-それらすべてのドメイン名がhttpsを使用している場合(必要に応じて)
-すべてのドメイン名でwww dot domainNameを使用する場合
これにより、ダブルリダイレクトが回避されます(http:// non wwwからhttp:// wwwへ、次にhttps:// wwwへ)。
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^(.*)$ https://www.%1$1 [R=301,L]
</VirtualHost>
そして
<VirtualHost *:443>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
リダイレクトコード301を最も便利なものに変更する必要があります
上記の<VirtualHost *:80>
異なる2つのブロックのソリューションを使用する場合ServerName
...
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
</VirtualHost>
...次に、同様に設定NameVirtualHost On
する必要があります。
これを行わないと、ApacheはServerName
ブロックを区別するために異なるを使用することを許可しないため、次のエラーメッセージが表示されます。
[warn] _default_ VirtualHost overlap on port 80, the first has precedence
...そしてリダイレクトが発生しないか、最初に配置したブロックに応じて無限のリダイレクトループが発生します。
私はWPマルチサイトで同様のタスクを持っていましたが、リダイレクトルールは一般的なものでなければなりませんでした(ネットワークに追加する特定のドメインに対して)。私は最初にドメイン(パーキングドメイン)にワイルドカードを追加することを解決しました。に注意してください。.comの後。
CNAME * domain.com.
次に、マルチサイトのルートにある.htaccessファイルに次の行を追加しました。それはどんなサイトでもうまくいくと思います。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
うまくいけば、これが役立ちます。
ps。www以外からwwwにリダイレクトする場合は、最後の行を
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
複数の仮想ホストを使用する場合は、ServerAliasを使用する方が簡単(かつ便利)です。
<VirtualHost x.x.x.x:80>
ServerName www.example.com
ServerAlias example.com
....
</VirtualHost>
これはhttps vhostsでも機能します。
.htaccess
:ベースのソリューション私は、直径質問に提起されてきた答えは示唆stackoverflow.com/a/5262044/367456