ホームページ > php教程 > PHP开发 > Apache URL書き換え

Apache URL書き換え

黄舟
リリース: 2016-12-21 11:21:21
オリジナル
2588 人が閲覧しました

最初の方法: Apache 環境で URL アドレスを書き換える場合、正規表現が最も基本的な要件ですが、一般的な URL アドレスの場合は、基本的な一致でほとんどの要件を満たすことができるため、よほど特殊な URL アドレスでない限り、しかし、これは私が議論したい内容の範囲ではありません。いくつかの簡単な手順で Apache で URL アドレスを書き換える方法を学びましょう:

002

003 URL 例

004

005 書き換え URL: http://www.baidu.com/?p=152

006

007 元の URL: http://www.baidu.com/p152.html

008

009 書き換えルール:

010

011 ^p([0-9]+).html /?p=$1 [L]

012

013 基本的な日常知識:

014

015 ^ 行頭と一致、URL と一致します。RewriteRule の場合、ドメイン名 (http://www.xxxx.com) は URL アドレスの一部ではありません (上記のように)。キャプチャされた式を区切ります。上記のように: ([0-9]+)

018

019 [] 上記のように文字クラスを定義します。[0-9] は 0 ~ 9 の数字を表します

020

021 + を示します前の文字を繰り返すことができることを示します。 上記のように 1 回または複数回一致します: [0-9]+、任意の数字の組み合わせを示します

022

023 文字エスケープ、上記のように: エスケープ。

026

027 [ L] は最後を意味し、他の一致を停止します

028

029 方法は次のとおりです:

030

031 1. httpd.conf ファイルを開き、

032

033 #Lo を見つけます。 adModule rewrite_module modules/mod_rewrite.so コメントを前に #

034

035 2. httpd-vhosts.conf ファイルを開き、VirtualHost に書き換えルールを追加します

036

037 RewriteEngine On

038 039 書き換えルール ^ p([0-9]+).html / ?p=$1 [L]

040

041 基本的には上記の2ステップです。実は、ApacheにおけるURLアドレスの書き換えは一般的には比較的簡単です。ドキュメントから学ぶよりもはるかに早いですが、詳細を知りたい場合は、関連するドキュメントを読む必要があります。その他のルールはカスタマイズできます。覚えておいてください: すべての一致は実際には正規表現の置換プロセスです。

042

043 検索エンジンに適した URL アドレスを作成することは PHP プログラマーにとって非常に重要であるため、Apache で URL アドレスの書き換えを学習することは最も基本的な要件の 1 つになります。

044

045

046 2 番目の方法:

047

048 1. まず、書き換えモジュールがインストールされているかどうかを確認します:

049

05 0 cat httpd.conf | grep rewrite

051 LoadModule rewrite_module モジュール/ mod_rewrite.so

052

053 2. 疑似静的 HTML 接続を生成します:

054

055 (1) 疑似静的 HTML を生成します

056

057

058 を追加します

059の最後 セクション RewriteEngine on

060 RewriteRule /goods([0-9]+).html /goods.php?id=$1 [PT]

061 より標準的な書き方は次のとおりです:

062 RewriteRule ^ (.*)/goods( [0-9]+).html$ $1/goods.php?id=$2 [PT]

063 より簡潔に書く:

064 /goods(d+).html /goods.php ?id=$1

065

066 最初の (0-9]+) はパラメータ $1 に対応し、以下同様に 2 番目のパラメータは $2 に対応します

067

068 例:

069

070 RewriteRule /forum - ([0-9] +)-([0-9]+).html /forumdisplay.php?fid=$1&page=$2 [PT]

071

072 http://www.xxx かどうかをテストします。 com/goods1.html は次と一致します / Goods.php?id=1 の内容は同じです

073

074 最後に、すべてのリンクが設定された疑似静的 HTML アドレスに置き換えられます

075

076

077 [PT]: URL グローバル変換、つまり、変換された Goods31.html は、goods.php?id=31 に対応します (パラメータなしのデフォルトはこれです)

078 [R]: URL リダイレクトは、 Goods31.html にアクセスするときですgoods.php?id = 31

079

080

081にジャンプします3.アンチホットリンク:

082

083rewritecrond%{http_host}!xxxx.com [r = 301、l]

084書き直し^(.*)$ http://www.xxxx.com/warning.html [R=301,L]

085

086 xxxx.com から http://www.xxxx .com にリクエストをリダイレクトしないでください

087

088 より良いアプローチ:

089 RewriteCond %{HTTP_REFERER} !^http://(www.)?xxxx.com/.*$ [NC]

090 RewriteRule .(mp 3| rar|jpe| gif)$ http://www.xxxx.com/warning.jpg [R=301,L]

091

092 4. アンチBaidu クローラー:

093 RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [ OR]

094 RewriteRule ^(.*)$ http://www.google.com [R=301,L]

095 クローラーを Baidu から goole に転送

096

097

098

099

100 PS: PHP 疑似静的メソッド

101

102 メソッド 1:

103

104 たとえば、この Web ページ

105

106 http://www.xxxx.com/soft.php/1,100、 8630.html

107

108 実際、処理されるスクリプトはsoft.phpでパラメータは1,100,8630

109

110 Soft.php?a=1&b=1=100&c=8630と同等です。この URL は難しすぎるので覚えておいてください。検索エンジンもそれを好みません。

111

112 真の静的とは、完全に生成された HTML です。

113

114 クライアントがアクセスした際に直接出力します。スクリプトの説明は不要です。トラフィックが非常に多い場合 (毎日何百万ものアクセスがある場合など)、非常に良い結果が得られます。つまり、この HTML ページはサーバー側に実際に存在します。

115

116 もちろん、ウェブサイトのトラフィックがそれほど多くない場合です。 URL 書き換えが最良の方法です (個人的な意見ですが、トラフィックが多い場合は負荷分散を考慮する必要があります。どちらでも構いません)

117

118 URL 書き換えの方法は、APACHE や IISREWRITE を含め、多数あります。 PHP スクリプトでも直接処理できます。たとえば、上記の例では、PHP スクリプトが直接処理しています (この方法の利点は、大量のトラフィックがあるときに WEB サーバーの負荷を直接軽減できることです。 PS: これも個人的な意見です:

119

120 =========== ================================= ===

121

122 PHP 疑似静的プログラムの実装方法を例に挙げてみましょう。実際、私は以前にこの方法を他のフォーラムコミュニティに投稿しました

123

124 プログラム例:

125

126 http://www.xxxx.com/soft.php /1,100,8630.html

127

128 CODE:

129

130 //この例では、サーバー変数を使用して PATH_INFO 情報を取得します。実行スクリプト名以降の部分である/1,100,8630.html

131

132 if(@$path_info =$ _SERVER["PATH_INFO"]){

133 //通常の一致パラメータ

134 if(preg_match("//(d+),(d+),(d+).html/si",$path_info,$arr_path)){

135 $gid =intval($arr_path[1]); //値 1 を取得します

136 $sid =intval($arr_path[2]); //値 100 を取得します

137 $softid =intval($arr_path[3]) //値 8630 を取得します

138 } else die("Path:Error!");

139 //soft.php?gid=1&sid =100&softid=8630 と同等

140 //とても簡単です ~)

141 方法 2:

142 開くApache の設定ファイル httpd.conf。

143 2 #LoadModule rewrite_module modules/mod_rewrite の前の # を削除します

144 3 httpd.conf に次のように追加します:

145

146 RewriteEngine On

147 #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html

148 RewriteRule ^(.*?(?:index|dispbbs))-([-0-9 ]+).html 1.php?__is_apache_rewrite=1&__rewrite_arg=2

149

150 4 番目に、3 番目のステップで、ASP ポストの URL を php ポストにマッピングします。 を追加します:

151 RewriteMap to lowercase int:to lower

152 RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)=d+ [NC]

153 RewriteRule ^ (.*(?:index|dispbbs)).asp 1.php?{to lowercase:%{QUERY_STRING}}&__is_apache_rewrite=1

154 5 httpd.conf を保存し、Apache を再起動します

155 方法 3:

156

157 関数 mod_rewrite(){

158 グローバル

159 $ _GET;

160 $nav=$ _SERVER["REQUEST_URI"]

161 $script_name=$ _SERVER["SCRIPT_NAME"];

162 $nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);

163 $nav=preg_replace("/^.ht(m){1}(l){ 0,1}$/","",$nav);//この文は .html または .htm の末尾を削除したものです

164 $vars =explode("/",$nav);

165 for( $ i=0;$i

166 $ _GET["$vars[$i]"]=$vars[$i+1];

167 }

168 return $ _GET;

169 }

170 mod_rewrite();

171 $yearn=$ _GET["year"];//結果は '2006' です

172 $action=$ _GET["action "] ;//結果は '_add' です

173 echo $yearn;

174 echo $action;

175 ?>

176

177 function mod_rewrite(){

178 global $ _GET;

179 $nav= $ _SERVER["REQUEST_URI"];

180 $script_name= $ _SERVER["SCRIPT_NAME"]

181 $nav=substr("^$script_name","", URL デコード($ nav)),1);

182 $nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);/ /この文は末尾の .html または .htm を削除します

183 $vars =explode("/",$nav);

184 for($i=0;$i

185 $ _GET["$vars[$i]"]=$vars[$i+1] }

187 return

188 $ _GET }

190 mod_rewrite; ();

191 $yearn= $ _GET["year"];//結果は '2006' です

192 $action=$ _GET["action"];// 結果は '_add' です

193 echo $yearn;

194 echo $action

195 多くの場合、特定の IP へのアクセスにより CPU が 100% になる可能性があります (一部の検索エンジンによる固定クロール、多数の収集サイトによるものなど)。その他)、現時点では、サーバーのリソースを消費できないように、相手の IP をブロックする方法が必要です。Web サーバーに Rewrite モジュールがインストールされている場合は、さまざまな方法で IP をブロックできます。また、書き換えルールを使用して相手の IP をブロックしてみてください。

196 1. たとえば、特定の IP を baidu ホームページに直接リダイレクトし、Web サイトのルート ディレクトリにある .htaccess ファイルにコードを追加します。

197 RewriteCond % 123.123.123.123 [NC]RewriteRule ^(. *)$ http://www.baidu.com/$1 [R=301] IP 123.123.123.123 を制限したい IP に置き換えます

198 2. 複数の IP を実装したい場合は、次のように記述できます:

199 RewriteCond % 123.123.123.123 [OR]RewriteCond % 124.124.124.124 [NC]RewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301]

上記はURLですApache Content によって書き換えられたアドレス。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート