0

夜、

私は次の場所でファイルを実行しています:

/ home / user / Web / sites / gubbinz /

WebサーバーのルートはWeb/です

URLをロードすると:localhost / sites / gubbinz / index.php?request = home.html

ファイルがあるかどうかを確認したい./sites/gubbinz/cache/home.html

次を使用してこれを機能させることができます。

RewriteCond %{QUERY_STRING}     ^request=(.*)    [NC]
RewriteCond /home/user/Web/sites/gubbinz/cache/home.html -f
RewriteRule ^.+$ cache/%1 [QSA,L]

しかし、これは好きではありません:

RewriteCond %{QUERY_STRING}     ^request=(.*)    [NC]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}cache/home.html -f
RewriteRule ^.+$ cache/%1 [QSA,L]

後者の方が好きです。ローカルホストとライブに対して1つのルールを持つことができるからです。誰かが私がどこで間違っているのか知っていますか?

注意:RewriteBaseが設定されていません。

4

1 に答える 1

1

少しいじった後、これは私が思いつくことができる最高のものであり、複数のサーバー条件を必要とせずにサーバー間で機能します。

RewriteCond %{SCRIPT_FILENAME}  ^(.+)\/index.php$                   [NC]
RewriteRule .* - [E=PATH:%1]

RewriteCond %{QUERY_STRING}     ^request=(.*)    [NC]
RewriteCond %{ENV:PATH}/cache/%1.html -f
RewriteRule ^.+$ cache/%1.html [QSA,L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^.+$ index.php?request=$0 [QSA,L]

最初の部分は、リクエストの送信元のディレクトリのフルパスを取得し、それを環境変数として保存します。index.phpは最後から削除されます。

2番目の部分は、実際にロードされたURLを含む内部リダイレクトを取得し、キャッシュされたバージョンのHTMLが存在するかどうかを確認し、存在する場合は内部リダイレクトを実行します。

3番目の部分は、「検索エンジンに適したURL」を取得し、index.php?request={URL}への内部リダイレクトを実行します。

つまり、URLをロードします。

http://domain.com/page/sub-page

3番目の条件セットは、これを次の場所にリダイレクトします。

http://domain.com/index.php?request=page/sub-page

次に、2番目のセット(最初のルールでenv。var。が設定されている)は、サーバーに./cache/page/sub-page.htmlが存在するかどうかを確認します。含まれている場合は、そのページがブラウザに表示されます。

3番目の条件セットが必要ではないというこれを使用する可能性がある人には注意してください。2つのルールでこれを行うことができます。PHP処理の一部として、index.php?request=555へのリダイレクトを使用します。

于 2012-05-18T18:11:36.220 に答える