www.example.com
にリダイレクトしたいと思いexample.com
ます。次の htaccess コードはこれを実現します。
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
しかし、ドメイン名をハードコーディングせずに一般的な方法でこれを行う方法はありますか?
www.example.com
にリダイレクトしたいと思いexample.com
ます。次の htaccess コードはこれを実現します。
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
しかし、ドメイン名をハードコーディングせずに一般的な方法でこれを行う方法はありますか?
しかし、別々の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]
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]
これを 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
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R]
は、 の後に変数内のRewriteCond
すべてをキャプチャし、に保存します。HTTP_HOST
www.
%1
RewriteRule
は先頭のない URL をキャプチャし、に/
保存し$1
ます。
これを試して:
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C]
RewriteRule ^www\.(.*)$ http://$1 [L,R=301]
ホストが www で始まる場合は、ホスト全体を URL の先頭に貼り付けてから、「www.」を削除します。
完全な汎用 WWW ハンドラ、http/https
完全な答えは見えませんでした。これを使用して、WWW の組み込みを処理します。
これがどのように機能するか、または抜け穴を残した場合はお知らせください。
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]
htaccess リダイレクトに関しては、多くの誤った情報が飛び交っている可能性があります。まず、このコードが機能すると予想される場合は、サイトが Windows ホストではなく、Apache を使用する Unix 上で実行されていることを確認してください。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
(ただし、テキストの各行の間に行間がないことを確認してください。このウィンドウで問題なく表示されるように、行間に余分なスペースを追加しました。)
これは、サイトの www バージョンを http:// バージョンにリダイレクトするために使用できるコード スニペットの 1 つです。他の同様のコードも使用できます。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]
サブフォルダ用
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]
上記のルールを使用して 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]
私がそれを機能させる唯一の方法...
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]
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 からの拒否
これは、Apache 2.4 で動作するように更新されています。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Michael のものとの唯一の変更点[NC]
は、「AH00665」エラーを生成するを削除することです。
非正規表現パターン '-f' の NoCase オプションはサポートされていないため、無視されます
なぜあなたが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を元の環境にリダイレクトしません。
こんにちは、htaccess ファイルで次のルールを使用できます。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]