最初に、ルールに与えられたすべてのパラメーターを調べて、これが連鎖要求であるかどうかを示している可能性があります。つまり、1)変更されたURIに関連しない連鎖リクエストで変更された変数、または2)変更されたURIに関連し、変更されなかった変数(それを他の人と比較できるため)のいずれかが必要です。変更しました)。
問題は、ほとんどすべてが適用されたに従って更新されることRewriteRules
です。
IS_SUBREQ
(1)とTHE_REQUEST
(2)だけが興味深い変数ですが、残念ながら内部リダイレクトはサブリクエストとして扱われないため、表示されIS_SUBREQ
なくなります。THE_REQUEST
変更されず、実際に指定されたパスが含まれているだけなので、エントリポイントが見つかりました。
これを念頭に置いて、ここに厄介な複雑な解決策があります:
RewriteEngine On
# Set SCRIPT_URI and SUBREQ
# MUST be the first statements in the file
# SCRIPT_URI is the original browser-requested path
# SUBREQ is "true" if the original browser-requested path is not overriden yet
RewriteCond %{ENV:REQUEST_PARSED} !true
RewriteCond %{THE_REQUEST} ^\s*\w+\s+(http://[^\s/]+/|/?)([^\s\?]*)[\s\?$]
RewriteRule .? - [E=SCRIPT_URI:/%2,C]
RewriteRule .? - [E=REQUEST_PARSED:true]
RewriteCond %{ENV:SCRIPT_URI} ^(.*?)/\.($|/.*$)
RewriteRule .? - [E=SCRIPT_URI:%1%2,N]
RewriteCond %{ENV:SCRIPT_URI} ^(.*?)/[^/]+/\.\.($|/.*$)
RewriteRule .? - [E=SCRIPT_URI:%1%3,N]
RewriteCond %{ENV:SCRIPT_URI} ^(.*?)//\.\.($|/.*$)
RewriteRule .? - [E=SCRIPT_URI:%1/%2,N]
RewriteCond %{ENV:SCRIPT_URI}#%{REQUEST_URI} !^/*(.*)#/*\1$
RewriteRule .? - [E=SUBREQ:true]
# SCRIPT_URI and SUBREQ are set now. Actual content follows:
RewriteCond %{ENV:SUBREQ} !true
RewriteRule ^resources/.+$ - [L]
RewriteCond %{ENV:SUBREQ} !true
RewriteRule .? index.php?t=$0 [QSA,L]