検索
ホームページバックエンド開発PHPチュートリアルhtaccess 構文チュートリアル Apache サーバーの疑似静的ルール チュートリアル_PHP チュートリアル

htaccess 構文チュートリアル Apache サーバーの疑似静的ルール チュートリアル

注: Discuz! フォーラムで静的ルールを探している場合は、ここを参照する必要はなく、Discuz! の背景にリンクがあるので、それをコピーするだけです。 PHPwind については使用したことがないのでわかりません。バックグラウンドにあるはずです。

最近、Apacheの書き換えルールを勉強していますが、インターネット上にたくさんのチュートリアルがありますが、そのほとんどが個人から盗用したものであり、完全ではないことがわかったので、簡単で簡単なものを書きたいと思います。チュートリアルは、ディレクトリの保護から始まります。これは、インターネット上で選択できるエディターもいくつかありますが、ここでは説明しません。インターネット上にもチュートリアルがあります。そのほとんどはある人からのコピーです。チュートリアルは次のように書かれています。

リライトエンジンオン

RewriteCond%{HTTP_HOST}^(www.)?xxx.com$

RewriteCond%{REQUEST_URI}!^/blog/

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

書き換えルール^(.*)$/ブログ/$1

#ファイル名を入力しない場合は、デフォルトでホームページに移動します

RewriteCond%{HTTP_HOST}^(www.)?xxx.com$

RewriteRule^(/)?$blog/index.php[L]

それが何を意味するのか説明しましょう:

[RewriteEngineOn] は、書き換えエンジンがオンまたはオフであることを意味します。この機能は、ステートメントを 1 つずつコメントする必要がないように、次のステートメントを便利にオンまたはオフにすることです。

【RewriteCond%{HTTP_HOST}^(www.)?xxx.com$】

これは書き換え条件です。前の %{HTTP_HOST} は、プレフィックス部分のみを参照する、www.xxx.com を表します。^ は、文字列の先頭、$ は文字列の末尾を示し、. はエスケープされないことを意味します。一部のサーバーがサポートしていないことを防ぐためにエスケープすることをお勧めします。 1 回、このルールの意味は、アクセスした URL が xxx.com または www.xxx.com の場合、次のステートメントを実行し、一致しない場合はスキップします。

【RewriteCond%{REQUEST_URI}!^/blog/】

これは書き換え条件でもあります。%{REQUEST_URI} は、訪問の相対アドレスを表します。これは、ドメイン名 / の後のコンポーネントであるルート ディレクトリからの相対アドレスです。この形式には、最初の「/」が含まれます。非を意味します。このステートメントはアクセスを表します。アドレスは /blog/ で始まりません。単に ^ で始まり、$

で終わりません。

【RewriteCond%{REQUEST_FILENAME}!-f】

【RewriteCond%{REQUEST_FILENAME}!-d]

これら 2 つの文の意味は、要求されたファイルまたはパスが存在しない場合、既存のファイルまたはパスが返されるということです。

【RewriteRule^(.*)$/blog/$1】書き換えルール、最も重要な部分は、上記の RewriteCond 条件が満たされた場合にこの書き換えルールが実行されることを意味します。^(.*)$ は正規表現の一致です。 ^(.*)$ は現在の URL の任意の文字と一致することを意味します。 . は任意の 1 文字を意味します。 * は 0 回または N 回 (N>0) 回一致することを意味します。 /blog/$1 は書き換えコンポーネントです。これは、以前に一致した文字を /blog/$1 に書き換えることを意味します。この $1 は逆一致を表し、最初の括弧内のコンポーネント、つまり ^(.*)$ .* を参照します。実際、問題が発生します。これについては後で説明します。

【RewriteCond%{HTTP_HOST}^(www.)?xxx.com$】

【RewriteRule^(/)?$blog/index.php[L]】

この 2 つの文の意味は、要求されたホスト アドレスが www.xxx.com で、アドレスの末尾に「/」が 0 または 1 つしかない場合は、サブディレクトリのホームページに書き換えられると思われます。これは主に書き換えられたアドレスはホームページを自動的に見つけられないため、自分で指定する必要があります。

それでは、問題について説明しましょう。RewriteRule^(.*)$/blog/$1^(.*)$ の最初の部分は、現在要求されている URL と一致します。たとえば、要求された URL は http://www.xxx です。 .com/ a.html は、http://www.xxx.com/a.html 全体に一致しますか、/a.html (バックスラッシュの後のコンポーネント) のみに一致しますか、それとも a.html のみに一致しますか。

答えは次のとおりです。 RewriteBase のルールによれば、 rewritebase が / の場合、先行するバックスラッシュなしの a.html と一致するため、前のステートメントは RewriteRule^(.*)$blog/$1 (/ なし) として記述する必要があります。ただし、実際のアプリケーションでは、バックスラッシュの有無にかかわらず、前にバックスラッシュを付けて使用することもできます。ここで問題が発生します。rewritebase が / に設定されていない場合、URL 全体 http://www.xxx.com/a.html が一致することになるため、これを追加する必要があります。

リライトベース/

もう 1 つの問題は、全員が入力した URL が小文字であるという保証がないことです。URL が大文字で入力された場合、Linux システムでは大文字と小文字が区別されるため、大文字と小文字を無視するには RewriteCond の後に [NC] を追加する必要があります。

この時点で、完全な文は次のようになります:

####スタート####

リライトエンジンオン

リライトベース/

RewriteCond%{HTTP_HOST}^(www.)?xxx.com$[NC]

RewriteCond%{REQUEST_URI}!^/blog/

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

書き換えルール^(.*)$ブログ/$1

#ファイル名を入力しない場合は、デフォルトでホームページに移動します

RewriteCond%{HTTP_HOST}^(www.)?xxx.com$[NC]

RewriteRule^(/)?$blog/index.php[L]

####終了####

その後にさらにステートメントがある場合は、最後の [L] を追加しないでください。これは最後のステートメントを意味するためです

ホットリンクを防ぐには、次のように RewiteBase/ を追加する必要もあります:

リライトエンジン

リライトベース/

RewriteCond%{HTTP_REFERER}!^$[NC]

RewriteCond%{HTTP_REFERER}!xxx.info[NC]

RewriteRule.(jpg|gif|png|bmp|swf|jpeg)$/error/daolian.gif[R,NC,L]

後でさらにステートメントがある場合、最後の [L] は追加しないでください。 /error/daolian.gif は、他の人がホットリンクしたときに表示される画像です。

以下に簡単な文法規則とフラグを添付します:

【RewriteCond構文:】

CondTestStringCondPattern[フラグ]を書き換えます

rewritecond のその他の使用法:

「-d」(ディレクトリ)

TestString をパス名として扱い、それが既存のディレクトリであるかどうかをテストします。

「-f」(通常のファイル)

TestString をパス名として扱い、それが存在する通常のファイルであるかどうかをテストします。

「-s」(空ではない通常のファイル)

TestString をパス名として扱い、それがサイズが 0 より大きい既存の通常のファイルであるかどうかをテストします。

「-l」(シンボリックリンク)

TestString をパス名として扱い、それが既存のシンボリック リンクであるかどうかをテストします。

「-x」(実行可能ファイル)

TestString をパス名として扱い、それが実行可能権限を持つ既存のファイルであるかどうかをテストします。この権限はオペレーティング システムによって検出されます。

‘-F’ (サブリクエストに存在するファイル用)

TestString が有効なファイルであり、サーバーの現在のアクセス制御設定でアクセスできるかどうかを確認します。内部サブリクエストを使用してチェックを実行すると、サーバーのパフォーマンスが低下するため、注意して使用してください。

「-U」(サブリクエスト用URL)

TestString が有効な URL であり、サーバーの現在のアクセス制御設定でアクセスできるかどうかを確認します。内部サブリクエストを使用してチェックを実行すると、サーバーのパフォーマンスが低下するため、注意して使用してください。

【RewriteRule構文:】

RewriteRulePatternSubstitution[フラグ]

【フラグ】:

「chain|C」(次のルールにリンク)

このタグは、現在のルールを次のルールにリンクします。これには、ルールが一致すると、その後続ルールが処理され続けるという効果があります。つまり、このタグは、ルールが一致しない場合、その後続ルールはスキップされます。たとえば、ディレクトリ レベルのルールで外部リダイレクトを実行する場合、「.www」を削除する必要がある場合があります (「.www」はここでは表示されません)。

「cookie|CO=NAME:VAL:domain[:lifetime[:path]]」(cookieを設定)

クライアント側でCookieを設定します。 Cookie の名前は NAME で、値は VAL です。 Domain は Cookie のドメイン (「.apache.org」など)、オプションの Lifetime は Cookie の有効期間 (分)、オプションの path は Cookie のパスです。


‘env|E=VAR:VAL’ (環境変数を設定)

このタグは、環境変数 VAR の値を VAL に設定します。VAL には、拡張可能な正規表現後方参照 ($N および %N) を含めることができます。このタグを複数回使用して、複数の変数を設定できます。これらの変数は、後続の多くの状況で、通常は XSSI () または CGI ($ENV{'VAR'})、または後続の RewriteCond の CondPattern パラメーターで間接的に参照できます。ディレクティブは %{ENV:VAR} によって参照されます。これを使用して、URL から削除された情報を記憶します。

「forbidden|F」(禁止されたU​​RL)

現在の URL を強制的に禁止します。つまり、HTTP 応答コード 403 (禁止) を直ちにフィードバックします。このタグを使用すると、複数の RewriteCond をチェーンして、特定の URL を条件付きでブロックできます。

「gone|G」(URL強制破棄)

現在の URL を強制的に廃止します。つまり、HTTP 応答コード 410 (廃止) を直ちにフィードバックします。このタグは、ページが放棄され、存在しないことを示すために使用します。

‘handler|H=Content-handler’(必須のコンテンツハンドラー仕様)

対象ファイルのコンテンツハンドラーをContent-handlerとして強力にカスタマイズします。たとえば、ScriptAlias ディレクティブは、mod_alias モジュールをエミュレートして、マップされたフォルダー内のすべてのファイルを「cgi-script」プロセッサーによって強制的に処理するために使用されます。

「last|L」(終了ルール)

書き換え操作を直ちに停止し、それ以上の書き換えルールは適用されません。 Perlの最後のコマンドやC言語のbreakコマンドに相当します。このタグは、現在書き換えられている URL が後続のルールによって再び書き換えられるのを防ぐために使用されます。たとえば、これを使用してルート パスの URL (「/」) を実際の URL (例: 「/e/www/」) に書き換えることができます。

「next|N」(最初からやり直す)

書き換え操作を再実行します(最初のルールからやり直します)。このとき、再度処理される URL は元の URL ではなく、最後の書き換えルールによって処理された URL になります。 Perl の next コマンドや C 言語の continue コマンドに相当します。このマークにより、再書き込み操作を再開できます (ループの最初にすぐに戻ります)。ただし、無限ループにならないように注意してください。

「nocase|NC」(大文字と小文字を無視)

パターンが大文字と小文字を区別しないようにします。つまり、パターンが現在の URL と一致する場合、「A-Z」と「a-z」の間に違いはありません。

‘noescape|NE’ (出力で URI をエスケープしない)

このフラグは、mod_rewrite が通常の URI エスケープ ルールを適用して結果を書き換えるのを防ぎます。一般に、特殊文字 (「%」、「$」、「;」など) は、同等の 16 進コード (「%」、「$」、「;」など) にエスケープされます。このフラグは、そのようなエスケープを防止して、パーセント記号などの記号を出力に表示できるようにします。例:

RewriteRule/foo/(.*)/bar?arg=P1=$1[R,NE]

「/foo/zed」を安全なリクエスト「/bar?arg=P1=zed」にリダイレクトできます。

‘nosubreq|NS’(内部サブリクエストを処理しません)

このフラグは、現在のリクエストが内部サブリクエストである場合に、書き換えエンジンに書き換えルールを強制的にスキップさせます。たとえば、mod_include がディレクトリのデフォルト ファイル (index.xxx) を検索しようとすると、Apache は内部でサブリクエストを生成します。ルールの書き換えは必ずしもサブリクエストに役立つわけではなく、ルールセット全体が有効な場合はエラーがスローされる場合もあります。したがって、このタグを使用して特定のルールを除外できます。

使用原則: CGI スクリプトによる処理を強制するために URL に CGI スクリプト接頭辞を追加したが、サブリクエスト処理のエラー率 (またはリソースのオーバーヘッド) が高い場合は、このタグを使用できます。

「プロキシ|P」(プロキシになるよう強制)

このフラグにより​​、置換コンポーネントがプロキシ リクエストとして内部的に強制的に送信され、書き換え処理が直ちに中断され、処理が mod_proxy モジュールに引き渡されます。この置換文字列が mod_proxy で処理できる有効な URI (http://hostname で始まるなど) であることを確認する必要があります。そうしないと、プロキシ モジュールからエラーが返されます。このタグを使用すると、特定のリモート コンポーネントをローカル サーバーのドメイン名前空間にマッピングできるため、ProxyPass ディレクティブの機能が強化されます。

注: この機能を使用するには、mod_proxy モジュールを有効にする必要があります。

「パススルー | PT」(次のプロセッサに引き渡す)

このタグは、書き換えエンジンに内部 request_rec 構造体の uri フィールドをファイル名フィールドの値に設定するように強制します。この小さな変更により、RewriteRule ディレクティブの出力を Alias、ScriptAlias、リダイレクトおよびその他のディレクティブ。後続の処理用 [原文: Thisflagisjustahack toenablepost-processingoftheoutputofRewriteRuledirectives,usingAlias,ScriptAlias,Redirect,andotherdirectivesfromvariousURI-to-filenametranslators]。その意味を説明する例を挙げると: /abc を /def に書き換えてから、mod_alias を使用して /def を /ghi に変換する場合は、次のようにすることができます:

RewriteRule^/abc(.*)/def$1[PT]

エイリアス/def/ghi

PTタグを省略した場合、uri=/abc/…をfilename=/def/…に書き換える部分は正常に動作しますが、後続のmod_aliasでURIをファイル名に変換しようとすると失敗します。

注: URI をファイル名に変換する複数のモジュールを混在させる必要がある場合は、このタグを使用する必要があります。 。ここでの mod_alias と mod_rewrite の混合は典型的な例です。

‘qsappend|QSA’(クエリ文字列を追加)

このフラグは、書き換えエンジンに既存の置換文字列を単純に置き換えるのではなく、クエリ文字列を強制的に追加させます。書き換えルールを通じてリクエスト文字列に情報を追加する必要がある場合は、このタグを使用できます。

「redirect|R[=code]」(強制リダイレクト)

置換が http://thishost[:thisport]/ で始まる場合 (新しい URL を URI にする)、外部リダイレクトを強制できます。コードが指定されていない場合、HTTP 応答コード 302 (Temporary Move) が生成されます。 300 ~ 400 の範囲の別の応答コードを使用する必要がある場合は、ここで指定するだけです (または、次のシンボリック名のいずれかを使用します: temp (デフォルト)、permanent、seeother)。これを使用して、「/~」を「/u/」に書き換えたり、/u/user に常にスラッシュを追加したりするなど、正規化された URL をクライアントにフィードバックします。

注: このタグを使用する場合は、置換フィールドが有効な URL であることを確認する必要があります。そうしないと、無効な場所を指すことになります。また、このタグ自体は URL の先頭に http://thishost[:thisport]/ を付けるだけであり、書き換え操作は続行されることに注意してください。多くの場合、書き換え操作を停止してすぐにリダイレクトする必要があるため、「L」タグも使用する必要があります。

「skip|S=num」(後続のルールをスキップ)

このタグは、書き換えエンジンに現在の一致ルールの後の num 個のルールを強制的にスキップさせます。 if-then-else 構造をシミュレートできます。最後のルールは then 節であり、skip=N ルールは else 節です。注: これは、「chain|C」タグとは異なります。

「type|T=MIME-type」(必須の MIME タイプ)

ターゲット ファイルの MIME タイプを MIME タイプに強制します。これは、特定の条件に基づいてコンテンツ タイプを強制するために使用できます。たとえば、次のコマンドでは、.phps 拡張子を付けて呼び出した場合に、PHP ソース コード (application/x-httpd-php-source) の MIME タイプに従って mod_php で .php ファイルを表示できます。

RewriteRule^(.+.php)s$$1[T=application/x-httpd-php-source]

【Apacheサーバー変数:】

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477293.html技術記事 htaccess 構文のチュートリアル Apache サーバーの疑似静的ルールのチュートリアル 注: Discuz! フォーラムで静的ルールを探している場合は、ここを参照する必要はありません。Discuz!...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
如何快速把你的 Python 代码变为 API如何快速把你的 Python 代码变为 APIApr 14, 2023 pm 06:28 PM

提到API开发,你可能会想到DjangoRESTFramework,Flask,FastAPI,没错,它们完全可以用来编写API,不过,今天分享的这个框架可以让你更快把现有的函数转化为API,它就是Sanic。Sanic简介Sanic[1],是Python3.7+Web服务器和Web框架,旨在提高性能。它允许使用Python3.5中添加的async/await语法,这可以有效避免阻塞从而达到提升响应速度的目的。Sanic致力于提供一种简单且快速,集创建和启动于一体的方法

2023年最流行的5个php开发框架视频教程推荐2023年最流行的5个php开发框架视频教程推荐May 08, 2017 pm 04:26 PM

如果想快速进行php web开发,选择一个好用的php开发框架至关重要,一个好的php开发框架可以让开发工作变得更加快捷、安全和有效。那2023年最流行的php开发框架有哪些呢?这些php开发框架排名如何?

PHP8.0中新的类型别名语法PHP8.0中新的类型别名语法May 14, 2023 pm 02:21 PM

随着PHP8.0的发布,新增了一种类型别名语法,使得使用自定义的类型变得更加容易。在本文中,我们将深入了解这种新的语法,以及它对开发人员的影响。什么是类型别名?在PHP中,类型别名本质上是一个变量,它引用另一个类型的名称。这个变量可以像其他类型一样使用,并在代码中的任何地方声明。这种语法的主要作用是为常用的类型定义自定义别名,使得代码更加易于阅读和理解。

lambda 表达式的语法和结构有什么特点?lambda 表达式的语法和结构有什么特点?Apr 25, 2024 pm 01:12 PM

Lambda表达式是无名称的匿名函数,其语法为:(parameter_list)->expression。它们具有匿名性、多样性、柯里化和闭包等特点。实际应用中,Lambda表达式可用于简洁地定义函数,如求和函数sum_lambda=lambdax,y:x+y,并通过map()函数应用于列表来进行求和操作。

Go语言与JS的联系与区别Go语言与JS的联系与区别Mar 29, 2024 am 11:15 AM

Go语言与JS的联系与区别Go语言(也称为Golang)和JavaScript(JS)都是当前流行的编程语言,它们在某些方面有联系,在其他方面又有明显的区别。本篇文章将探讨Go语言与JavaScript之间的联系与区别,同时提供具体的代码示例来帮助读者更好地理解这两种编程语言。联系:都是跨平台的Go语言和JavaScript都是跨平台的,可以在不同的操作系统

PHP8.0中的父类调用语法PHP8.0中的父类调用语法May 14, 2023 pm 01:00 PM

PHP是一种广泛应用于Web开发的服务器端脚本语言,而PHP8.0版本中引入了一种新的父类调用语法,让面向对象编程更加方便和简洁。在PHP中,我们可以通过继承的方式创建一个父类和一个或多个子类。子类可以继承父类的属性和方法,并可以通过重写父类的方法来修改或扩展其功能。在普通的PHP继承中,如果我们想在子类中调用父类的方法,需要使用parent关键字来引用父

学会使用CSS选择器的基本语法学会使用CSS选择器的基本语法Jan 13, 2024 am 11:44 AM

掌握基本的CSS选择器语法,需要具体代码示例CSS选择器是前端开发中非常重要的一部分,它可以用来选择和修改HTML文档的各个元素。掌握基本的CSS选择器语法对于编写高效的样式表是至关重要的。本文将介绍一些常见的CSS选择器以及对应的代码示例。元素选择器元素选择器是最基本的选择器,可以通过元素的标签名来选择对应的元素。例如,要选择所有的段落(p元素),可以使用

乘方运算在C语言中的用法及语法乘方运算在C语言中的用法及语法Feb 18, 2024 pm 04:05 PM

C语言中乘方运算的语法和用法简介:在C语言中,乘方运算(poweroperation)是一种常见的数学运算,它用于计算一个数的幂。在C语言中,我们可以使用标准库函数或者自定义函数来实现乘方运算。本文将详细介绍C语言中乘方运算的语法和用法,并提供具体的代码示例。一、使用math.h中的pow()函数在C语言中,math.h标准库中提供了pow()函数,用于执

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

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

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

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール