ホームページ  >  記事  >  バックエンド開発  >  RewriteCond の関連知識と 13 の mod_rewrite アプリケーション例の説明 Apache pseudo-static

RewriteCond の関連知識と 13 の mod_rewrite アプリケーション例の説明 Apache pseudo-static

jacklove
jackloveオリジナル
2018-06-11 10:58:312243ブラウズ

1.サブドメイン名に www タグを追加します
RewriteCond %{HTTP_HOST} ^([a-z.] )?example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\ . [ NC]
RewriteRule .? http://www.xample.com%{REQUEST_URI} [R=301,L]
このルールは、第 2 レベルのドメイン名の %1 変数をキャプチャします。 www で始まらない場合は、www を追加し、その後に前のドメイン名と {REQUEST_URI} を続けます。
2.ドメイン名の www タグを削除します
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule .? http://example.com%{REQUEST_URI} [ R= 301,L]
3. www タグを削除しますが、サブドメインは保存します
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_] \.)?example\.com ) $ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
ここで、1% 変数が一致すると、サブドメイン名は %2 になります (内部アトム)、そして必要なのはこの %1 変数です。
4.画像のホットリンクを防ぐ##ウェブマスターの中には、自分の Web サイトに画像をホットリンクしようとあらゆる手段を講じる者もいますが、これにより帯域幅が消費されます。この動作を防ぐコードを追加できます。
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/ [NC]
RewriteRule \.(gif|jpg| png)$ - [F]
{HTTP_REFERER} 値が空でない場合、または独自のドメイン名からのものではない場合、このルールは [F]FLAG を使用して gif|jpg|png で終わる URL をブロックします
このタイプのホットリンクを絶対に嫌っている場合は、画像を変更して、ホットリンク Web サイトを訪問するユーザーに、その Web サイトがあなたの写真を盗んでいることを知らせることもできます。
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC]
RewriteRule \.(gif |jpg|png)$ あなたの画像アドレス [R=301,L]
画像へのホットリンクを防ぐことに加えて、上記のルールはホットリンクされたすべての画像を設定した画像に置き換えます。
特定のドメイン名による画像のホットリンクを防ぐこともできます:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?leech_site\.com/ [NC]
RewriteRule \.( gif|jpg|png)$ - [F,L]
このルールは、ドメイン名のブラックリストにあるすべての画像リンク要求をブロックします。
もちろん、上記のルールは {HTTP_REFERER} に基づいてドメイン名を取得します。これを IP アドレスに変更したい場合は、{REMOTE_ADDR} を使用するだけです。

5.ファイルが存在しない場合は、404 ページにリダイレクトします。 ホストが 404 ページ リダイレクト サービスを提供していない場合は、弊社が独自に作成します。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]
ここで、-f は既存のファイル名に一致し、-d は既存のファイル名に一致します。既存のパス名。このコードは、404 リダイレクトを実行する前に、ファイル名とパス名が存在するかどうかを判断します。 404 ページに ?url=$1 パラメータを追加することもできます:
RewriteRule ^/?(.*)$ /404.php?url=$1 [L]
このようにして、404 ページをデフォルトの信頼度、電子メールリマインダーの送信、検索の追加など、その他の機能もあります。

6.ディレクトリ名の変更 Web サイト上のディレクトリの名前を変更したい場合は、次のことを試してください:
RewriteRule ^/?old_directory/([a-z/.] )$ new_directory/$1 [R=301 , L]
ルールでは、ファイルのサフィックス名と一致するように「.」を追加しました (すべての文字を表すわけではなく、先頭にエスケープ文字があることに注意してください)。 ############7。 .html サフィックスを .php
に変換します。 .html ファイルに引き続きアクセスできる場合は、Web サイトのリンクを更新します。 RewriteRule ^/?([a-z/] )\.html$ $1.php [L] これは Web ページのリダイレクトではないため、訪問者には表示されません。これを永続的なリダイレクト (可視) にし、FLAG を [R=301,L] に変更します。
8.ファイル拡張子なしでリンクを作成する


PHP Web サイトへのリンクをより簡潔で覚えやすいものにしたい場合、またはファイル拡張子を非表示にしたい場合は、これを試してください: RewriteRule ^/?([ a-z] )$ $1.php [L] Web サイトに PHP ファイルと HTML ファイルが混在している場合は、RewriteCond を使用して、最初にこのサフィックスを持つファイルが存在するかどうかを確認し、次にそれを置き換えることができます: RewriteCond %{REQUEST_FILENAME }.php - f RewriteRule ^/?([a-zA-Z0-9] )$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^/?( [a-zA -Z0-9] )$ $1.html [L]
ファイルに .php 接尾辞が付いている場合、このルールが実行されます。


9.クエリ変数の特定のパラメータを確認する


URL に特別なパラメータがある場合は、RewriteCond を使用してその存在を識別できます:
RewriteCond %{QUERY_STRING} !uniquekey=
RewriteRule ^/?script_that_requires_uniquekey\.php$ other_script.php [QSA,L]
上記のルールは、{QUERY_STRING} に uniquekey パラメータが存在するかどうかを確認します。{REQUEST_URI} の値が script_that_requires_uniquekey の場合、新しい URL に転送されます。
10.クエリ変数を削除します。
Apache の mod_rewrite モジュールは、次の変更を加えない限り、クエリ変数を自動的に認識します:
a) 新しいクエリ パラメータを割り当てます ([QSA,L] FLAG を使用して保存します)。元のクエリ変数)
b) ファイル名の後に「?」を追加します (index.php? など)。ブラウザのアドレスバーに「?」記号は表示されません。
11.現在実行している URL の場合、現在の URI を新しい形式
で表示します: /index.php?id=nnnn。これを /nnnn に変更し、検索エンジンに新しい形式で表示されるようにしたいと考えています。まず、検索エンジンを新しいものに更新するには、古い URL を新しい形式にリダイレクトする必要がありますが、以前の Index.php が引き続き実行できることも確認する必要があります。あなたは私に混乱していますか?
上記の機能を実現する秘訣は、訪問者には見えないマーカー「マーカー」をクエリ変数に追加することです。クエリ変数に「マーカー」タグを持たないリンクのみをリダイレクトし、元のリンクを新しい形式で置き換え、[QSA] FLAG を通じて既存のパラメーターに「マーカー」タグを追加します。実装方法は以下の通りです。
RewriteCond %{QUERY_STRING} !mark
RewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_ ] )
RewriteRule ^/?index\.php $ %1? [R=301,L]
RewriteRule ^/?([-a-zA-Z0-9_ ] )$index.php?marker &id=$1 [L]
ここに元の URL : http://www.example.com/index.php?id=nnnn にはマーカーが含まれていないため、最初のルールによって http://www.example.com/nnnn に永続的にリダイレクトされ、http:// 2 番目のルールにより、//www.example.com/nnnn は http://www.example.com/index.php?marker&id=nnnn と 2 つの変数 mark と id= にリダイレクトされます。 nnnn が追加され、最後に mod_rewrite が処理プロセスを開始します。
2 番目の一致では、マーカーが一致するため、最初のルールは無視されます。これは http://www.example.com/index.php?marker &id=nnnn に表示されます。 2 番目のルールも無視されるので、これで完了です。
このソリューションには Apache の拡張機能が必要なため、Web サイトが共有ホスト上に配置されている場合は多くの障害に遭遇することに注意してください。
12.セキュリティ サービスが有効になっていることを確認します#Apache は、セキュリティ サービスが有効になっているかどうかを識別する 2 つの方法を使用して、それぞれ {HTTPS} 変数と {SERVER_PORT} 変数を参照します。 ##RewriteCond %{ REQUEST_URI} ^secure_page\.php$
RewriteCond %{HTTPS} !on
RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R =301,L]
上記のルールは、{REQUEST_URI} 値が安全なページ コードと等しいかどうか、および {HTTPS} が on に等しくないかどうかをテストします。これら 2 つの条件が同時に満たされる場合、リクエストはセキュリティで保護されたサービス URI にリダイレクトされます。さらに、{SERVER_PORT} を使用して同じテストを実行できます。これは一般的に使用されるセキュリティ サービス ポート
RewriteCond % です。 {REQUEST_URI} ^secure_page\.php$
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301 、L]


13。特定のページにセキュリティ サービスを適用する 同じサーバー ルート ディレクトリ内にセキュリティ サービス ドメイン名と非セキュリティ サービス ドメイン名が存在する場合は、RewriteCond を使用して、セキュリティ サービス ポートがは占有であり、安全なサービスであるためには次のリストのページのみが必要です: RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(page1|page2|page3|page4|page5)$ https: //www .example.com/%1[R=301,L]
安全なサービスとして設定されていないページをポート 80 に返す方法は次のとおりです:
RewriteCond %{ SERVER_PORT } ^443 $
RewriteRule !^ /?(page6|page7|page8|page9)$http://www.example.com%{REQUEST_URI} [R=301,L]

この記事では、RewriteCond と 13 Apache 擬似静的に関する mod_rewrite アプリケーションの例と関連知識について説明します。さらに関連するコンテンツについては、PHP 中国語 Web サイトを参照してください。

#関連する推奨事項:

フォワード プロキシとリバース プロキシの違いを理解する

#Apache を使用して仮想ホストを構築する方法

sh memcached プロセスを開始して監視する方法

以上がRewriteCond の関連知識と 13 の mod_rewrite アプリケーション例の説明 Apache pseudo-staticの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。