2

基本的に私は以下のhtaccessを持っています。現時点では完全に機能しますが、すべてのファイルをリダイレクトします。たとえば、about.phpを/aboutにリダイレクトするだけの場合はfoo.phpを/fooに変換します。基本的に、about.phpの.php拡張子を強制的に削除しますが、そのファイルのみを削除します。

RewriteRule ^about$ about.php [L]
RewriteCond %{REQUEST_URI} ^/about.php$ [NC]
RewriteRule .* /about [R,L]

今、私は上記のコードを持っています。これで、リダイレクトエラーが多すぎます。

4

3 に答える 3

5
RewriteRule ^about$ about.php [L]

これは正しい書き直しです。つまり、へのリクエストは、次の/aboutリクエストであるかのように処理されます/about.php

そして、この別の問題については:

ユーザーがabout.phpと入力しても、そのユーザーに表示されたくない

からへのリダイレクトが必要になります。これが2行目と3行目(リダイレクト用のフラグ付きのRewriteRule )ですが、条件は広範であり、余分なものも含まれています。/about.php/about[R]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

次のように変更します。

RewriteCond %{REQUEST_URI} ^/about.php$ [NC]
RewriteRule .* /about [R,L]

これはGETパラメータを保持しますか?

[QSA]フラグ(クエリ文字列の追加)を追加すると、はい。

アップデート

@PeterWoosterが指摘したように、リダイレクト部分は次のように簡略化できます。

Redirect /about.php /about
于 2013-03-16T00:16:10.113 に答える
2

自分で直しました。

RewriteCond %{THE_REQUEST} about.php
RewriteRule (.*)\.php$ /$1 [L,R]
RewriteRule ^about$ about.php [L]
于 2013-03-16T11:48:43.273 に答える
0

リダイレクトルールを使用してこれを行うことができます。これは非常に簡単です。http://httpd.apache.org/docs/2.2/mod/mod_alias.html

編集:これにより、サーバーはクライアントにリダイレクトを送信します。301ステータスが使用されている場合、これはサイトを移動するときのSEOに特に役立ちます。

apacheドキュメントの例:

/servicehttp://foo2.example.com/serviceをリダイレクトします

于 2013-03-16T00:04:32.250 に答える