質問:
%{QUERY_STRING}
.htaccess ファイルで達成したことの機能を壊すことなくクリアすることは可能ですか?
?foo=bar
ユーザーが事前定義された $_GET vars を上書きして URL の末尾に追加するのを防ぎたい
(外部書き換え) 例:
から:example.com/foo/bar/hello/world?test=blah
に:example.com/foo/bar/hello/world
これまでのところ、これを(内部的に)達成することができました:
から:example.com/foo/bar/hello/world
に:example.com/index.php?foo=bar&hello=world
.htaccess
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s.+\.(?:html?|php|aspx?) [NC]
RewriteRule ^(.+)\.php$ /$1 [R=301,L,NC]
# To externally redirect /dir/index to /dir/
RewriteCond %{THE_REQUEST} ^GET\s((.+)?(\/)?)?(index) [NC]
RewriteRule ^(([^/]+/)*)index$ /$1 [R=301,L,NC]
# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule . %{REQUEST_URI}.php [L]
# Prevent Rewrite on existing directories, files, and links
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L] #^ - [L]
# To internally rewrite directories as query string
RewriteRule ^([^/=]+)=([^/]*)(/(.+))?\/?$ /$4?$1=$2 [N,QSA]
RewriteRule ^([^/=]+)/([^/=]+)(/(.+))?\/?$ /$4?$1=$2 [N,QSA]
RewriteRule ^([^/=]+)(/(.+))?\/?$ /$3?$1 [N,QSA]
私が試したこと:
#if there is a query string
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule (.*) $1? [R=301,L] #remove query string
-
#if there is a query string
RewriteCond %{QUERY_STRING} !=""
RewriteRule (.*) $1? [R=301,L] #remove query string
-
#if there is a query string
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*)$ $1? [R=301,L] #remove query string
上記を適用すると、私がすでに達成したことがすべて壊れることをどこかで読んで、それを経験しました。$_GET変数がマスクされている場合、URL全体を完全にクリアします。apache 0.o もクラッシュします (ばかげた正規表現または .htaccess コードを許してください。それらは私の強力なスイートではなく、そのほとんどは SO で見つけたスニペットでした)
これは可能ですか?私が間違っていることはありますか?
ありがとう