Web サイトから PHP 拡張機能を削除しようとしていました。ユーザーが PHP ファイルを要求すると、PHP が削除され、ユーザーはリダイレクトされます。ユーザーが PHP なしで URL を入力すると、実際の PHP ファイルが提供されます。URLにGETパラメータがある場合を除いて、これはうまくいきました。私のルールは以下の通りです。
# remove .php ONLY if requested directly
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]
# remove trailing slash ONLY if it is not an existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# rewrite to FILENAME.php if such file does exist and is not a folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L,QSA]
これで、GETパラメータがあってもphpを削除できるはずだと思っていたのですが、失敗しました。私も次のようなことを試しました:
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA]
それも機能しませんでした.phpはまだそこにあります。しかし、私が試してみると:
RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA]
つまり、RewriteCond を削除すると、php 拡張機能が削除され、パラメーターは保持されますが、リダイレクトが多すぎるとブラウザーが通知するため、ページは提供されません。
誰でもアイデアをください?