www.example.com
をexample.com
にリダイレクトしたいです。次のhtaccessコードはこれを実現します。
RewriteCond %{HTTP_Host} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
しかし、ドメイン名をハードコーディングせずにこれを一般的な方法で行う方法はありますか?
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
これが機能することを除けば、 Michael's と同じです。P
しかし、これを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
Www URLをno-wwwにリダイレクトするための規則は次のとおりです。
#########################
# redirect www to no-www
#########################
RewriteCond %{HTTP_Host} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]
これは、www以外のURLをwwwにリダイレクトするための規則です。
#########################
# redirect no-www to www
#########################
RewriteCond %{HTTP_Host} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
Apacheがクエリ文字列をエスケープしないようにするためにNE
フラグを使用したことに注意してください。このフラグがなければ、Apacheは要求されたURL http://www.example.com/?foo%20bar
をhttp://www.example.com/?foo%2250bar
に変更します。
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%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://バージョンに誘導するために使用できるコードの一部です。使用できる他の同様のコードもあります。
サイト全体にアクセスする必要がある人のためにWITHOUT 'www'プレフィックス。
RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
これを次のファイルに追加してください。
/site/location/.htaccess
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]
RewriteEngine on
# if Host value starts with "www."
RewriteCond %{HTTP_Host} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]
www
とhttp
の両方でhttps
を削除する場合は、次のようにします。
RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]
これはNon sslをリダイレクトします
に
そしてSSL
に
apacheの2.4.*
では、Redirect
とif
ディレクティブを使ってこれを実現できます。
<if "%{HTTP_Host} =='www.example.com'">
Redirect / http://example.com/
</if>
使用:Javascript/jQuery
// similar behavior as an HTTP redirect
window.location.replace("http://www.stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
または.htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_Host} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
そしてPHPメソッド:
$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if (substr($_SERVER['HTTP_Host'], 0, 4) !== 'www.') {
header('Location: '.$protocol.'www.'.$_SERVER ['HTTP_Host'].'/'.$_SERVER['REQUEST_URI']);
exit;
}
Ajax
$.ajax({
type: "POST",
url: reqUrl,
data: reqBody,
dataType: "json",
success: function(data, textStatus) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
else {
// data.form contains the HTML for the replacement form
$("#myform").replaceWith(data.form);
}
}
});
上記のルールを使ってwwwからno 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]
ここで選択した答えと他の多くの解決策は/の後のURLの部分を削除したので、基本的には少なくともメインドメインには常にメインドメインにリダイレクトされます。
RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,R=301]
私がそれを働かせる唯一の方法は….
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からの拒否
.htaccessを使ってwwwまたはnon-wwwにリダイレクトする
次のコードをメインのルートの.htaccessファイルに追加するだけです。どちらの場合も、domain.comを自分のホスト名に変更するだけです。
Wwwにリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_Host} ^domain\.com [NC]
RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
</IfModule>
Www以外へのリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
</IfModule>
dOTを=>に変更します。 !!!
これはApache 2.4で動作するように更新されています。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Vs Michaelの に対する唯一の変更は、 "AH00665"エラーを生成する[NC]
を削除することです。
非正規表現パターン '-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をオリジナルの環境にリダイレクトしない。