5

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 拡張機能が削除され、パラメーターは保持されますが、リダイレクトが多すぎるとブラウザーが通知するため、ページは提供されません。

誰でもアイデアをください?

4

2 に答える 2

2

Steapさん、ご回答ありがとうございます。私はちょうど今、それに対処する方法を見つけることができたので、他の人が同様の問題に遭遇した場合に備えてここで共有したいと思います.

私のルールでは、

# remove .php ONLY if requested directly
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]

ユーザーが PHP ファイルを要求したときに外部リダイレクトを実行します。ここでの RewriteCond は、リダイレクト ループを防ぐためのものです。つまり、不適切な内部書き換えと外部リダイレクト (php を削除し、php を追加し、再度削除するなど) によるエンドレス リダイレクトです。

パラメータがある場合、実際のヘッダーはhttp://domain.com/file.php ?.... HTTP/1.1 のようになります。このように、RewriteCond のパターンはパラメータを取らないため機能しません。考慮します。

これを解決するには、上記のコードを次のコードに置き換えるだけです。

# remove .php ONLY if requested directly
RewriteCond %{THE_REQUEST} (\.php(.*)\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]

そうすることで、パラメータをパターンに合わせることができ、すべてが機能するようになりました。

これが同様の問題を抱えている人に役立つことを願っています(または、私のような初心者ですか?笑)

于 2012-09-02T18:21:04.873 に答える
0

ここ%{QUERY_STRING}に記載されているパラメータを使用することをお勧めします。

ここここを読むと便利です。

于 2012-09-01T22:29:41.337 に答える