2012-09-01 14 views
5

私のウェブサイトからPHP拡張機能を削除しようとしていました。ユーザーがPHPファイルを要求すると、PHPは削除され、ユーザーはリダイレクトされます。ユーザーがPHPなしでURLを入力すると、実際のP​​HPファイルが提供されます。 URLにGETパラメータがある場合を除いて、これはうまくいきました。私のルールは以下の通りです:Apache Mod_rewriteを使用してGETパラメータを保持したままPHP拡張モジュールを削除する方法は?

# 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拡張が削除されると、パラメータが保存されていたが、ブラウザがあまりにも多くのリダイレクトがあったと言うように、ページが提供されることはありません。

誰にでも分かりますか?

答えて

0

%{QUERY_STRING}パラメータはhereと記載されています。

参考文献hereおよびhere

2

ありがとうSteApあなたの答えに感謝します。私はちょうど今それに対処する方法を見つけることができたし、他の人が同様の問題に遭遇した場合にここで共有したいと思います。私のルールで

、私は、ユーザーがPHPファイルを要求したときに外部へのリダイレクトを実行するには

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

を持っています。ここでの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] 

、パラメータがパターンにマッチすることができ、今ではすべてが動作します。 (?またはそれは私のようなただのnoobです笑)これは、誰かが同様の問題を持っ役立つのRewriteRuleで

+0

希望:/ $ 1が壊れたURLを生成、アウトで$ 1使用/ – StefanoCudini

関連する問題