2011-06-29 29 views
0

現時点では、私はページのURLを整理し、最後から.phpをノックしたり、追加したりする簡単な.htaccessを持っています。私のmod_writeと重複するURLを避ける

基本的に、/ about.phpは/ aboutになります。

しかし、これにより、これらのURLの両方でページにアクセスできるようになります。私はちょうどそれを吸うことができ、rel = canonicalタグを使用しますが、私はhtaccessでそれをきちんと整頓したいと思います。

手動で各URLを指定する以外に、.phpを.phpのバージョンに変換するより良い方法(巧妙な規則)がありますか?

また、本当に再書き込みルールが必要ですか?

<IfModule mod_rewrite.c> 


RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ /$1.php [QSA,L] 


ErrorDocument 404 /404 


</IfModule> 

答えて

0

非の.phpバージョン(場合には、それは既存のファイルです)あなたはこの1つを使用することができますし(301)、各.PHP-URLをリダイレクトするには、次の中

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{THE_REQUEST} \.php\ HTTP/.\..$ 
RewriteRule ^(.*)\.php$ /$1 [QSA,R=301,L] 

最初の二つのRewriteCondをあなたの.haccessは本当に必要ではありません。なぜなら、とにかくいくつかの競合があるからです。ファイルfoo.htmfoo.htm.phpがある場合は、foo.htmが要求されたときにどちらを表示する必要がありますか?

だから、完全mod_rewriteブロック:、あなただけのファイルまたはディレクトリではありません任意のページが追加さ.phpと同じ名前にリダイレクトされなければならないことを、あなたのオリジナルルールで

RewriteEngine On 
# redirect /foo.php to /foo 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{THE_REQUEST} \.php\ HTTP/.\..$ 
RewriteRule ^(.*)\.php$ /$1 [QSA,R=301,L] 
# rewrite /foo to /foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ /$1.php [QSA,L] 
+0

そして、それは 'あまりにも多くのリダイレクトERROR' –

+0

ハァッの原因になりますか? @ M'vy:あなたは正しいですが、私は理由が分かりません。 – Floern

+0

私の答えを見てください。私はまた、URL書き換えのハウツーに関する私の他の投稿を改善するでしょう。これは暗黙のうちにこれを述べているだけです。 –

0

言っています。

.phpファイルへのアクセスを「削除」するには、リダイレクトでマスクする必要があります。 したがって、foo/foo.phpが実際にfoo/fooであることをクライアントブラウザに伝えます。

これにより、クライアントからfoo/fooへの新しい要求がトリガーされます。

次に、foo/fooが実際にfoo/foo.phpであることをサーバーに伝えます。これにより内部リクエストがfoo/foo.phpにトリガーされます。ここにループがあります。私たちはそれを避ける必要があります。私が見つけた最良の回避策は、%{REDIRECT_URL}が空であるかどうかをチェックすることです。

最後のルールは以下のとおりです。

# External redirection from real file to virtual with safe guard for internal redirection. 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REDIRECT_URL} !^$ 
RewriteRule ^(.*)\.php$ /$1 [QSA,R=301,L] 

# Internal redirection to real file. 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ /$1.php [QSA,L] 

はANYリライト/リダイレクトが新しい要求をトリガすることを忘れないでください!

参照:How does url rewrite works?

+0

hm .. '%{REDIRECT_URL}'はローカルホスト上で動作しません.. – Floern

+0

hmmm。煩わしい。私のために働く...この問題については、moarを潜らせる必要があります。 –

+0

最後のRewriteRuleフラグに 'E = REDIRECT_URL:$ 1'を追加しようとしていますか? –

関連する問題