0

currentは、任意のURLのRewriteRuleクエリを除くすべてのクエリを削除します。callback

# Remove question mark and parameters
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^?#\ ]*)\?[^\ ]*\ HTTP/ [NC]
# Query rewrite exceptions
##RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !^/api.*?callback=.* #does not work
RewriteCond %{QUERY_STRING} !callback=
RewriteRule .*$ %{REQUEST_URI}? [R=301,L]

callbackURLだけからクエリの書き換えを回避するにはどうすればよい^api\/?([^\/]*)$ですか?例外的な結果:

  • / api?callback = 1、/ api / user?callback = 1、/ api / user / 2?callback=1の書き換えはありません
  • / apis?callback = 1、/ user?callback = 1、/ api / user?foo=1などに書き換えます。
4

2 に答える 2

1

index.phpを有効RewriteRuleにするには、クエリ書き換えの例外を追加する必要があります。

このルールは正常に機能し、この問題を修正します。

# Remove question mark and parameters
RewriteCond %{QUERY_STRING} .+
# Query rewrite exceptions
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !/api(/.*)?\?callback=.*
RewriteRule .*$ %{REQUEST_URI}? [R=301,L]
于 2012-09-29T20:35:48.023 に答える
1

やっとあなたの質問を理解しました...

次の行を置き換えます。

##RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !^/api.*?callback=.* #does not work
RewriteCond %{QUERY_STRING} !callback=

この行で:

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !^/api(/.*)?\?callback=.*

重要なお知らせ:

スクリプトがドキュメント ルートではなく dir/htestにあり、完全な URL が mine: のように見えるhttp://localhost/htest/api/?callback=1場合は、RewriteCond に API への完全なパスを配置する必要があります。

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !^/htest/api(/.*)?\?callback=.*

!/apiの代わりに正規表現を開始することでこれを克服できます^/path/to/api/foo/api/bar/api書き換えもスキップされます。

アップデート:

この .htaccess はドキュメント ルートで正常に動作します。

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^?#\ ]*)\?[^\ ]*\ HTTP/ [NC]
RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !^/api(/.*)?\?callback=.*
RewriteRule .*$ %{REQUEST_URI}? [R=temporary,L]

他のルールなしで使用して、何が問題なのかを確認することができます

更新 2

他の条件がある場合、つまり、

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

その前に RewriteCond を繰り返します。

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !^/api(/.*)?\?callback=.*
RewriteRule ^([^.]*)$ index.php?url=$1 [QSA,L]

また、これらのルールをサブディレクトリで使用できるようにするには、次のよう/fooに置き換え^/apiます^/foo/api

于 2012-09-20T10:45:46.637 に答える