Apacheの設定ファイル.htaccessは難しくて重要なポイントです。 Redirect メソッドは mod_rewrite に属するものだとずっと思っていて、それを使用するときに混乱しています。今日はとても良いチュートリアルを見つけたので、それを学びながらいくつかの考えを書き留めました。
更新: いくつかの小さな問題を継続的に修正
出典: .htaccess の総合ガイド
公式リファレンス: 指令クイックリファレンス
1 はじめに はじめに
ファイル名.htaccess 属性 644 (RW-R–R–)
htaccess は、それが配置されているディレクトリ内のすべてのサブディレクトリに影響します。ほとんどの内容は 1 行以内に収める必要があり、折り返さないとエラーが発生します。
2 エラー文書 エラー文書
公式ドキュメント: ErrorDocument ディレクティブ
ErrorDocument コードドキュメント
例
エラードキュメント 400 /errors/badrequest.html
エラードキュメント 404 http://yoursite/errors/notfound.html
ErrorDocument 401「認証が必要です」
(コンテンツの後半に出現する二重引用符はすべて " としてエスケープする必要があることに注意してください)
一般的な HTTP ステータス コード
成功したクライアントリクエスト
200 OK
201 件が作成されました
202 承認済み
203 非権限情報
204 コンテンツがありません
205 リセット内容
206 部分的なコンテンツ
クライアントリクエストがリダイレクトされました
300 の複数の選択肢
301 永久に移動しました
302 一時的に移動しました
303 その他を見る
304 未変更
305 プロキシを使用する
クライアントリクエストエラー
400 不正なリクエスト
401 認証が必要です
402 支払いが必要 (まだ使用されていません)
403 禁止
404 見つかりません
405 メソッドは許可されていません
406 受け入れられません (エンコーディング)
407 プロキシ認証が必要です
408 リクエストがタイムアウトしました
409 競合するリクエスト
410 ゴーン
411 コンテンツの長さが必要です
412 前提条件が失敗しました
413 リクエストエンティティが長すぎます
414 リクエスト URI が長すぎます
415 サポートされていないメディア タイプ
サーバーエラー
500 内部サーバーエラー
501 未実装
502不正なゲートウェイ
503 サービスは利用できません
504 ゲートウェイタイムアウト
505 HTTP バージョンはサポートされていません
3 パスワード保護 パスワード保護
公式ドキュメント: 認証、認可、およびアクセス制御
パスワード ファイルが .htpasswd であると仮定します。
AuthUserFile /usr/local/safedir/.htpasswd (ここでは絶対パス名を使用する必要があります)
認証名入力パスワード
認証タイプ 基本
2 つの一般的な検証方法:
userwindix が必要
(ユーザーwindixのみログインを許可します)
有効なユーザーが必要です
(すべての正規ユーザーがログインできます)
ヒント: htpasswd コマンド (Apache に付属) を使用してパスワード ファイルを生成する方法
第一世代にはパスワードファイルを作成する必要があります
htpasswd -c .htpasswd user1
後で新しいユーザーを追加する
htpasswd .htpasswd user2
4 htaccess 経由で SSI を有効にする htaccess 経由で SSI (サーバー側を含む) 機能を許可します
AddType テキスト/html .shtml
AddHandler サーバーで解析された .shtml
オプション インデックス FollowSymLinks に含まれるもの
DirectoryIndex インデックス.shtml インデックス.html
5 IP によるユーザーのブロック IP に基づいたユーザー アクセスのブロック
許可、拒否を注文する
123.45.6.7 からの拒否
12.34.5 からの拒否 (クラス C アドレス全体)
全員から許可する
6 リファラーによるユーザー/サイトのブロック リファラーに基づいてユーザー/サイトをブロック
mod_rewrite モジュールが必要
例 1. 単一のリファラーをブロックする: badsite.com
リライトエンジンがオン
# オプション +フォローシンボリンク
RewriteCond %{HTTP_REFERER} badsite.com [NC]
RewriteRule .* - [F]
例 2. 複数のリファラーをブロックする: badsite1.com、badsite2.com
リライトエンジンがオン
# オプション +フォローシンボリンク
RewriteCond %{HTTP_REFERER} badsite1.com [ノースカロライナ州、オレゴン州]
RewriteCond %{HTTP_REFERER} badsite2.com
RewriteRule .* - [F]
[NC] - 大文字と小文字は区別されません
[F] - 403 禁止
上記のコードでは、「Options +FollowSymlinks」ステートメントがコメント化されていることに注意してください。サーバーが httpd.conf セクションで FollowSymLinks を設定していない場合は、この文を追加する必要があります。追加しないと、「500 Internal Server error」エラーが発生します。
7 不正なボットとサイト リッパー (別名オフライン ブラウザ) のブロック 不正なボットとオフライン ブラウザのブロック
mod_rewrite モジュールが必要
悪いクローラー? たとえば、スパム電子メール アドレスを取得するクローラーや、robots.txt に準拠していないクローラー (baidu など?)
HTTP_USER_AGENT に基づいて判断できます。
(ただし、「Zhongsou zhongsou.com」のような、さらに恥知らずな企業もあり、独自のエージェントを「Mozilla/4.0 (互換性、MSIE 5.5、Windows NT 5.0)」に設定しています。彼らはあまりにも不正で、何もできません。)
リライトエンジンオン
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:[email protected] [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^ダウンロード デーモン [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb!
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Go-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [ノースカロライナ州、オレゴン州]
RewriteCond %{HTTP_USER_AGENT} ^Image ストリッパー [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image 吸盤 [OR]
RewriteCond %{HTTP_USER_AGENT} Indy ライブラリ [ノースカロライナ州、オレゴン州]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^インターネット 忍者 [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC Web Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass ダウンローダー [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown ツール [OR]
RewriteCond %{HTTP_USER_AGENT} ^ミスター PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^ニアサイト [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net ヴァンパイア [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^タコ [OR]
RewriteCond %{HTTP_USER_AGENT} ^オフライン エクスプローラー [OR]
RewriteCond %{HTTP_USER_AGENT} ^オフライン ナビゲータ [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa 写真 [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^サーフボット [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web 画像 コレクター [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web サッカー [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^ウィドウ [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^ゼウス
RewriteRule ^.* - [F,L]
[F] - 403 禁止
[L] - ?
8 デフォルトのディレクトリ ページを変更する デフォルトのディレクトリ ページを変更する
DirectoryIndex インデックス.html インデックス.php インデックス.cgi インデックス.pl
9 リダイレクト
単一ファイル
/old_dir/old_file.html http://yoursite.com/new_dir/new_file.html リダイレクト
ディレクトリ全体
/old_dir http://yoursite.com/new_dir にリダイレクトします
効果: ディレクトリの移動と同じ
http://yoursite.com/old_dir -> http://yoursite.com/new_dir
http://yoursite.com/old_dir/dir1/test.html -> http://yoursite.com/new_dir/dir1/test.html
ヒント: ユーザー ディレクトリの使用時に Redirect がリダイレクトできない問題の解決策
Apache のデフォルトのユーザー ディレクトリ (http://mysite.com/~windix など) を使用し、http://mysite.com/~windix/jump にリダイレクトする場合、次のリダイレクトは行われないことがわかります。仕事:
http://www.google.com にリダイレクト/ジャンプします
正しい方法は、次のように変更することです
/~windix/jump http://www.google.com にリダイレクトします
(出典: 「サイト」の .htaccess リダイレクトがリダイレクトされない: なぜですか?)
10 .htaccess ファイルの閲覧を禁止する .htaccess ファイルの閲覧を禁止する
許可、拒否を注文する
全員から否定する
11 MIME タイプの追加 MIME タイプの追加
AddType アプリケーション/x-shockwave-flash swf
ヒント: タイプを application/octet-stream に設定すると、ダウンロードするように求められます。
12 画像およびその他のファイルタイプのホットリンクの防止 アンチホットリンク
mod_rewrite モジュールが必要
リライトエンジンがオン
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg|js|css)$ - [F]
分析:
HTTP_REFERER が空でない場合 (ソースは直接接続されていない他のサイト)、および HTTP_REFERER が (www.)mydomain.com で始まらない場合 (大文字と小文字 [NC] は無視) (ソースはこのサイトではありません)
.gif/.jpg/.js/.css で終わるすべてのファイルに対して 403 Forbidden エラー [F] が発生する
次の例は置換画像を示しているので、応答を指定することもできます。
RewriteRule .(gif|jpg)$ [R,L]
[R] - リダイレクト
[L] - リンク
13 ディレクトリ一覧の表示を禁止する ディレクトリ一覧が表示されないようにする
インデックス無視*
インデックス無視 *.jpg *.gif
ヒント:
ディレクトリリストの表示を許可: オプション +インデックス
司祭リストの表示を無効にする: オプション -インデックス
プロンプト情報の表示: ヘッダー ファイル HEADER、フッター ファイル README