525

www.example.comにリダイレクトしたいと思いexample.comます。次の htaccess コードはこれを実現します。

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

しかし、ドメイン名をハードコーディングせずに一般的な方法でこれを行う方法はありますか?

4

24 に答える 24

117

しかし、別々のhttpとhttpsに対してこれを行う必要がある場合:

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

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
于 2010-03-19T08:51:48.657 に答える
70

www 以外を wwwリダイレクトする(両方: http + https)

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

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
于 2011-03-10T15:42:10.487 に答える
46

これを httpd.conf ファイルで行いたい場合は、mod_rewrite なしで行うことができます (明らかにパフォーマンスが向上します)。

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

ここでその答えを得ました:https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507

于 2011-03-10T02:31:27.143 に答える
13
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R]

は、 の後に変数内のRewriteCondすべてをキャプチャし、に保存します。HTTP_HOSTwww.%1

RewriteRuleは先頭のない URL をキャプチャし、に/保存し$1ます。

于 2008-10-24T20:00:06.590 に答える
8

これを試して:

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

ホストが www で始まる場合は、ホスト全体を URL の先頭に貼り付けてから、「www.」を削除します。

于 2008-10-24T18:26:48.260 に答える
8

完全な汎用 WWW ハンドラ、http/https

完全な答えは見えませんでした。これを使用して、WWW の組み込みを処理します。

  1. ジェネリック。ドメイン情報は必要ありません。
  2. プライマリ ドメインで WWW を強制します: www.domain.com
  3. サブドメインの WWW を削除します: sub.domain.com
  4. HTTP/HTTPS ステータスを保持します。
  5. ドメイン/サブドメインの個別の Cookie を許可します

これがどのように機能するか、または抜け穴を残した場合はお知らせください。

RewriteEngine On
RewriteBase /

# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove WWW. when subdomain(s) in host     
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
于 2016-02-09T16:43:06.230 に答える
7

htaccess リダイレクトに関しては、多くの誤った情報が飛び交っている可能性があります。まず、このコードが機能すると予想される場合は、サイトが Windows ホストではなく、Apache を使用する Unix 上で実行されていることを確認してください。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(ただし、テキストの各行の間に行間がないことを確認してください。このウィンドウで問題なく表示されるように、行間に余分なスペースを追加しました。)

これは、サイトの www バージョンを http:// バージョンにリダイレクトするために使用できるコード スニペットの 1 つです。他の同様のコードも使用できます。

于 2011-01-17T16:06:28.737 に答える
4
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]

サブフォルダ用

于 2011-10-19T14:36:17.633 に答える
2

https で www から非 www へ

RewriteEngine on

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

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
于 2015-03-03T11:50:52.513 に答える
2

上記のルールを使用して www を www なしに転送しましたが、ホームページでは問題なく動作しますが、内部ページでは /index.php に転送しています

これを引き起こしている .htaccess ファイルでこの他のルールを見つけましたが、どうすればよいかわかりません。どんな提案も素晴らしいでしょう:

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]
于 2012-05-22T08:10:11.470 に答える
1

私がそれを機能させる唯一の方法...

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]
于 2011-02-28T18:21:34.897 に答える
1

wwwを強制している場合。url または強制的に ssl プロトコルを使用する場合は、次のような htaccess ファイルで可能なバリエーションを使用してみてください。

RewriteEngine オン
RewriteBase /

###強制WWW ###

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

## SSL を強制する ###

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

## IP のブロック ###
注文拒否、許可
256.251.0.139 からの拒否
199.127.0.259 からの拒否
于 2014-04-24T15:38:58.040 に答える
1

これは、Apache 2.4 で動作するように更新されています。

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

Michael のものとの唯一の変更点[NC]は、「AH00665」エラーを生成するを削除することです。

非正規表現パターン '-f' の NoCase オプションはサポートされていないため、無視されます

于 2016-05-05T16:07:53.833 に答える
0

なぜあなたがwwwを削除したいのかわかりません。ただし、逆バージョンは次のようになります。

# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]

このスクリプトの利点は次のとおりです。test.whattimein.comやその他の(開発/テスト用の環境)のようなものがある場合、Uを元の環境にリダイレクトしません。

于 2011-12-16T18:07:11.670 に答える
-3

こんにちは、htaccess ファイルで次のルールを使用できます。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
于 2015-05-05T12:29:10.297 に答える