この質問はここにあるので、htaccessファイルを使用してApacheで1つ以上の一般的または基本的なリダイレクトを行う方法に関する情報を探しているユーザーに提供できます。質問の対象となる情報を見つけることに関する将来の質問はすべて、この質問の複製として終了する必要があります。 このメタ質問による 。
この質問のポイントは何ですか?完璧ではないアイデアはApacheプラットフォームで、ある種のランプまたはライブサーバー上のhtaccessを使用して、リダイレクトに関するよくある質問をキャッチします。回答のタイプは一般に、世界中の100,000のサイトで使用されていると想像できるものである必要があり、ここではさまざまな形で何度も何度もプロWebマスターで繰り返し求められます。
私たちが探している答えのタイプのいくつかの例:
探していない答えのタイプのいくつかの例:
高度な複雑なMod_Rewriteルールのリソース:
注意してください:この質問はまだ建設中であり、懸念や質問がある場合は、自分またはプロのウェブマスターの実際のモデレーターのどちらかによって洗練されたもの ここで数日前に作成したメタページを使用してください 。
Htaccess内でリダイレクトを制御するために使用できる2つのモジュールがあり、これらは mod_alias および mod_rewrite として知られています。以下の2つの違いを明確にするために、mod_aliasまたはmod_rewriteを使用しているときに慣れ親しむコマンドがいくつかあります。
mod_aliasコマンド
mod_rewriteコマンド
mod_aliasはより単純なリダイレクトメソッドと見なされますが、mod_rewriteはより高度でより多くのディレクティブを許可します。 mod_aliasの前にmod_rewriteコマンドが実行されることに注意してください。
Htaccessを使用して1つのページを別のページにリダイレクトする方法は多数あります。301は一般的に最も重要であり、ほとんどの場合ページは一時的なリダイレクトではなく永続的なリダイレクトを必要とするため使用されます。パーマネントリダイレクトは、あるページのランキングを別のページに維持しようとするのに最適です。
301パーマネント
リダイレクト301:Redirect 301 /old.html http://www.example.com/new-url/
RedirectPermanent:RedirectPerm /old.html http://www.example.com/new-url/
RedirectMatch:RedirectMatch 301 ^old.html$ http://www.example.com/new-url/
RewriteRule:
RewriteEngine On
RewriteBase /
RewriteRule ^old.html$ http://www.example.com/new-url/ [R=301,NC,L]
302テンポラリー
リダイレクト302:Redirect 302 /old.html http://www.example.com/new-url/
RedirectTemp:RedirectTemp /old.html http://www.example.com/new-url/
RedirectMatch:RedirectMatch 302 ^old.html$ http://www.example.com/new-url/
RewriteRule:
RewriteEngine On
RewriteBase /
RewriteRule ^old.html$ http://www.example.com/new-url/ [R,NC,L]
$ 1変数はページ名をキャッチするため、サイトのwww以外のバージョンに対するすべてのリクエストのリダイレクトにmod_writeを使用することを選択する必要があります。したがって、example.com/page1/
は自動的にwww.example.com/page1/
にリダイレクトされます。
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
mod_alias:
<If "%{HTTP_Host} != 'www.example.com'">
Redirect permanent / http://www.example.com/
</If>
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
mod_alias:
<If "%{HTTP_Host} != 'example.com'">
Redirect permanent / http://example.com/
</If>
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ https://example.com$1 [R=301,L]
このスクリプトは、ログインページと登録ページを除く他のすべてのページのTLSを削除します。ファイル名の区切り文字として|
を使用するだけで追加できます。
mod_rewrite:
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/(login|register)\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_Host}/$1 [R=301,L]
完全なサイトでTLSを実施する場合、mod_rewriteを使用してHTTPSオフを検出できます。
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
一部のWebホストでは、htaccessでOptions -MultiViews
を使用してこれらの拡張機能を削除し、拡張機能なしでテストし、機能しない場合は単純に追加する必要があります。
拡張機能タイプPHPの削除:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
拡張機能タイプHTMLの削除:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
拡張タイプHTMの削除:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.htm [NC,L]
動かない?これを試してください(phpを削除するファイル拡張子に変更します):
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
強制:
これにより、末尾の/
のないすべてのリクエストが、最後にスラッシュが付いたURLにリダイレクトされます。 (括弧の2番目の部分内にあるのは無視するファイル拡張子です...画像のURLに/
を適用することは意味をなさないためです。
RewriteCond %{REQUEST_URI} !\.(php|html?|jpg|gif)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_Host}/$1$2/ [L,R=301]
削除:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.*)$
RewriteRule ^(.+)/$ http://www.example.com/$1 [R=301,L
これにより、URLで見つかったすべてのバックスラッシュがスラッシュに変換されます。重複コンテンツの防止に適しています:
RewriteEngine On
RewriteCond %{REQUEST_URI} (.*)\\(.*)
RewriteRule .* %1/%2 [R=301]
RewriteEngine On
# Redirect Entire Site to New Domain
RewriteCond %{HTTP_Host} ^example.com$ [OR]
RewriteCond %{HTTP_Host} ^sub-domain.example.com$ [NC]
RewriteRule ^(.*)$ http://new-example.com/$1 [R=301,L]
RewriteEngine On
# Rename folder to match the sub folder you wish to remove
RewriteCond %{HTTP_Host} ^(www\.)?example-old\.com$ [NC]
RewriteRule ^folder(/.*)?$ http://www.example-new.com$1 [L,R=301]