.htaccessファイルの$ 1 [QSA、L]はどういう意味ですか?


回答:


215

完全なチュートリアルを行う場所ではありませんが、ここでは簡単に説明します。

RewriteCondは、基本的に「これがtrueの場合にのみ次のRewriteRuleを実行する」ことを意味します。!-l経路は、要求が(リンクのためではないことが条件である!手段がない、-l手段リンク)

RewriteRuleは、要求が一致していることに行われた場合、その基本的な手段^(.+)$(サーバのルート以外の任意のURLにマッチする)、のように書き換えることになるindex.php?url=$1ための要求が意味しているolleように書き直すことになりますindex.php?url=olle)。

QSAは、元のURLで渡されたクエリ文字列がある場合、書き換えに追加されolle?p=1ます(として書き換えられindex.php?url=olle&p=1ます)。

L ルールが一致した場合、これ以下のRewriteRulesを処理しないことを意味します。

これに関するより完全な情報については、上記のリンクをたどってください。リライトのサポートを理解するのは少し難しいかもしれませんが、Stackoverflowから学ぶべきかなりの数の例があります。


QSAは、置き換え?&それは不可能を区別すること、/page&foobarVS /page?foobar。どのように私は交換からQSAを停止することができます?&
パセリエ2017

8

次の条件に該当する
場合は、URLを書き換えます。要求されたファイル名がディレクトリでない場合は、

RewriteCond %{REQUEST_FILENAME} !-d

要求されたファイル名が存在する通常のファイルではない場合、

RewriteCond %{REQUEST_FILENAME} !-f

要求されたファイル名がシンボリックリンクでない場合、

RewriteCond %{REQUEST_FILENAME} !-l

次に、次の方法でURLを書き換えます。
リクエストファイル名全体を受け取り、それを "url"クエリパラメータの値としてindex.phpに提供します。元のURLからのクエリ文字列を追加のクエリパラメータ(QSA)として追加し、この.htaccessファイルの処理を停止します(L)。

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Apache docs #flag_qsa

もう一つの例:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

[QSA]フラグを使用すると、

/ pages / 123?one = two

にマップされます

/page.php?page=123&one=two


0

これは、のようなファイルの要求キャプチャしますversionreleaseREADME.md(の/リリース場合のように)、またはとして定義されている場合、エンドポイントのいずれかとして扱われるべきである、などの「見つかりません。」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.