検索
ホームページバックエンド開発PHPチュートリアルApache 関連の mod_rewrite、RewriteCond、{HTTP_HOST}_PHP チュートリアル

Apache 関連の mod_rewrite、RewriteCond、{HTTP_HOST}_PHP チュートリアル

Jul 20, 2016 am 11:13 AM
apachehhosthttpmodrewriterewritecond追加ドメイン名マーク関連している

1.给子域名加www标记 

<span RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.<span com$ [NC] 
RewriteCond </span>%{HTTP_HOST} !^www\.<span  [NC] 
RewriteRule </span>.? http:<span //</span><span www.%1example.com%{REQUEST_URI} [R=301,L] </span>
这个规则抓取二级域名的%1变量,如果不是以www开始,那么就加www,以前的域名以及{REQUEST_URI}会跟在其后。</span>

2.去掉域名中的www标记 

<span RewriteCond %{HTTP_HOST} !^example\.<span com$ [NC] 
RewriteRule </span>.? http:<span //</span><span example.com%{REQUEST_URI} [R=301,L] </span></span>

 

3.去掉www标记,但是保存子域名 

<span RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?example\.<span com)$ [NC] 
RewriteRule </span>.? http:<span //</span><span %1%{REQUEST_URI} [R=301,L] </span>
这里,当匹配到1%变量以后,子域名才会在%2(内部原子)中抓取到,而我们需要的正是这个%1变量。 </span>

 



4.防止图片盗链 

<span <span 一些站长不择手段的将你的图片盗链在他们网站上,耗费你的带宽。你可以加一下代码阻止这种行为。 
RewriteCond </span>%{HTTP_REFERER} !^<span $ 
RewriteCond </span>%{HTTP_REFERER} !^http:<span //</span><span (www\.)?example\.com/ [NC] </span>
RewriteRule \.(gif|jpg|png)$ -<span  [F] 
如果{HTTP_REFERER}值不为空,或者不是来自你自己的域名,这个规则用[F]FLAG阻止以gif</span>|jpg|<span png 结尾的URL 
如果对这种盗链你是坚决鄙视的,你还可以改变图片,让访问盗链网站的用户知道该网站正在盗用你的图片。 
RewriteCond </span>%{HTTP_REFERER} !^<span $ 
RewriteCond </span>%{HTTP_REFERER} !^http:<span //</span><span (www\.)?example\.com/.*$ [NC] </span>
RewriteRule \.(gif|jpg|png)$ 你的图片地址 [R=301,<span L] 
除了阻止图片盗链链接,以上规则将其盗链的图片全部替换成了你设置的图片。 
你还可以阻止特定域名盗链你的图片: 
RewriteCond </span>%{HTTP_REFERER} !^http:<span //</span><span (www\.)?leech_site\.com/ [NC] </span>
RewriteRule \.(gif|jpg|png)$ - [F,<span L] 
这个规则将阻止域名黑名单上所有的图片链接请求。 
当然以上这些规则都是以{HTTP_REFERER}获取域名为基础的,如果你想改用成IP地址,用{REMOTE_ADDR}就可以了。</span></span>

 

5.如果文件不存在重定向到404页面 

<span <span 如果你的主机没有提供404页面重定向服务,那么我们自己创建。 
RewriteCond </span>%{REQUEST_FILENAME} !-<span f 
RewriteCond </span>%{REQUEST_FILENAME} !-<span d 
RewriteRule </span>.? /404.<span php [L] 
这里</span>-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在。你还可以在404页面上加一个?url=<span $1参数: 
RewriteRule </span>^/?(.*)$ /404.php?url=$1<span  [L] 
这样,你的404页面就可以做一些其他的事情,例如默认信心,发一个邮件提醒,加一个搜索,等等。</span></span>

 



6.重命名目录 

<span <span 如果你想在网站上重命名目录,试试这个: 
RewriteRule </span>^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,<span L] 
在规则里我添加了一个&ldquo;</span>.&rdquo;(注意不是代表得所有字符,前面有转义符)来匹配文件的后缀名。 </span>


7.将.html后缀名转换成.php 

<span 前提是.<span html文件能继续访问的情况下,更新你的网站链接。 
RewriteRule </span>^/?([a-z/]+)\.html$ $1.<span php [L] 
这不是一个网页重定向,所以访问者是不可见的。让他作为一个永久重定向(可见的),将FLAG修改[R</span>=301,L]。 </span>


8.创建无文件后缀名链接 

<span 如果你想使你的PHP网站的链接更加简洁易记-或者隐藏文件的后缀名,试试这个:<span  
RewriteRule </span>^/?([a-z]+)$ $1.<span php [L] 
如果网站混有PHP以及HTML文件,你可以用RewriteCond先判断该后缀的文件是否存在,然后进行替换: 
RewriteCond </span>%{REQUEST_FILENAME}.php -<span f 
RewriteRule </span>^/?([a-zA-Z0-9]+)$ $1.<span php [L] 
RewriteCond </span>%{REQUEST_FILENAME}.html -<span f 
RewriteRule </span>^/?([a-zA-Z0-9]+)$ $1.<span html [L] 
如果文件是以</span>.php为后缀,这条规则将被执行。</span>

 

9.检查查询变量里的特定参数 

<span <span 如果在URL里面有一个特殊的参数,你可用RewriteCond鉴别其是否存在: 
RewriteCond </span>%{QUERY_STRING} !uniquekey=<span  
RewriteRule </span>^/?script_that_requires_uniquekey\.php$ other_script.php [QSA,<span L] 
以上规则将检查{QUERY_STRING}里面的uniquekey参数是否存在,如果{REQUEST_URI}值为script_that_requires_uniquekey,将会定向到新的URL。 </span></span>


10.删除查询变量 

<span <span Apache的mod_rewrite模块会自动辨识查询变量,除非你做了以下改动: 
a)</span>.分配一个新的查询参数(你可以用[QSA,<span L]FLAG保存最初的查询变量) 
b)</span>.在文件名后面加一个&ldquo;?&rdquo;(比如index.php?)。符号&ldquo;?&rdquo;不会在浏览器的地址栏里显示。</span>

 

11.用新的格式展示当前URI 

<span 如果这就是我们当前正在运行的URLs:/index.php?id=nnnn。我们非常希望将其更改成/nnnn并且让搜索引擎以新格式展现。首先,我们为了让搜索引擎更新成新的,得将旧的URLs重定向到新的格式,但是,我们还得保证以前的index.<span php照样能够运行。是不是被我搞迷糊了? 
实现以上功能,诀窍就在于在查询变量中加了一个访问者看不到的标记符&ldquo;marker&rdquo;。我们只将查询变量中没有出现&ldquo;marker&rdquo;标记的链接进行重定向,然后将原有的链接替换成新的格式,并且通过[QSA]FLAG在已有的参数加一个&ldquo;marker&rdquo;标记。以下为实现的方式: 
RewriteCond </span>%{QUERY_STRING} !<span marker 
RewriteCond </span>%{QUERY_STRING} id=([-a-zA-Z0-9_+]+<span ) 
RewriteRule </span>^/?index\.php$ %1? [R=301,<span L] 
RewriteRule </span>^/?([-a-zA-Z0-9_+]+)$ index.php?marker &id=$1<span  [L]
这里,原先的URL:http</span>:<span //</span><span www.example.com/index.php?id=nnnn,不包含marker,所以被第一个规则永久重定向到http://www.example.com/nnnn,第二个规则将http://www.example.com/nnnn反定向到http://www.example.com/index.php?marker&id=nnnn,并且加了marker以及id=nnnn两个变量,最后mod_rewrite就开始进行处理过程。</span>
第二次匹配,marker被匹配,所以忽略第一条规则,这里有一个&ldquo;.&rdquo;字符会出现在http:<span //</span><span www.example.com/index.php?marker &id=nnnn中,所以第二条规则也会被忽略,这样我们就完成了。</span>
注意,这个解决方案要求Apache的一些扩展功能,所以如果你的网站放于在共享主机中会遇到很多障碍。</span>


12.保证安全服务启用 

<span <span Apache可以用两种方法辨别你是否开启了安全服务,分别引用{HTTPS}和{SERVER_PORT}变量: 
RewriteCond </span>%{REQUEST_URI} ^secure_page\.<span php$ 
RewriteCond </span>%{HTTPS} !<span on 
RewriteRule </span>^/?(secure_page\.php)$ https:<span //</span><span www.example.com/$1 [R=301,L] </span>
以上规则测试{REQUEST_URI}值是否等于我们的安全页代码,并且{HTTPS}不等于on。如果这两个条件同时满足,请求将被重定向到安全服务URI.<span 另外你可用{SERVER_PORT}做同样的测试,443是常用的安全服务端口 
RewriteCond </span>%{REQUEST_URI} ^secure_page\.<span php$ 
RewriteCond </span>%{SERVER_PORT} !^443<span $ 
RewriteRule </span>^/?(secure_page\.php)$ https:<span //</span><span www.example.com/$1 [R=301,L]</span></span>

 

 

13.在特定的页面上强制执行安全服务 

<span <span 遇到同一个服务器根目录下分别有一个安全服务域名和一个非安全服务域名,所以你就需要用RewriteCond 判断安全服务端口是否占用,并且只将以下列表的页面要求为安全服务: 
RewriteCond </span>%{SERVER_PORT} !^443<span $ 
RewriteRule </span>^/?(page1|page2|page3|page4|page5)$ https:<span //</span><span www.example.com/%1[R=301,L] </span>
<span 以下是怎样将没有设置成安全服务的页面返回到80端口: 
RewriteCond </span>%{ SERVER_PORT } ^443<span $ 
RewriteRule </span>!^/?(page6|page7|page8|page9)<span $http</span>:<span //</span><span www.example.com%{REQUEST_URI} [R=301,L]<br /><br />                                                      <br /></span></span>

                                                                                 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/440353.htmlTechArticle1.给子 域名 加www标记 %{HTTP_HOST} !^www\. .? http: 这个规则抓取二级域名的%1变量,如果不是以www开始,那么就加www,以前的域名以及{REQUEST_...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境