3

name.phpファイルを/name/にリダイレクト/書き換えたいと思いました。別のトピックで解決策を見つけました(http://stackoverflow.com/questions/5527789/htaccess-rewrite-within-directory-hide-php-extension-and -force-trailing-slash)

でも、自分で学びたかったので、ゼロから始めました。私は最初にこれを使用しました。これにより、たとえば.com /test/に.com/test.phpのコンテンツが表示されます。

 RewriteEngine On
 RewriteRule ^(.*)/$ $1.php

次に、.com/test.phpを.com/test/にリダイレクトする次のことを単独で試しました。

 RewriteEngine On
 RewriteRule ^(.*)\.php$ http://www.mydomain.info/$1/ [R=301]

したがって、どちらも独自に機能します。しかし、それらを組み合わせると、[L]を追加してもループエラーが発生します。これは、ルールを1回だけ使用する必要があることを意味します。したがって、これは機能しません。

 RewriteEngine On
 RewriteRule ^(.*)/$ $1.php [L]
 RewriteRule ^(.*)\.php$ http://www.mydomain.info/$1/ [L,R=301]

私はおそらくいくつかの愚かなエラーを犯しましたが、それは私には論理的に思えます...誰かが私のエラーを指摘できることを願っています。ありがとう。

4

2 に答える 2

1

を使用した外部リダイレクトがあるため、リダイレクトをR=301追加Lしても、リダイレクトはまったく新しいリクエストとしてサーバーに返されるため、必要なほど役に立ちません。ここでも、最初の書き換えルールに一致します。

代わりに、次のようなものが必要です。

RewriteCond %{THE_REQUEST} ^\w+\ /(.*)\.php\ HTTP/
RewriteRule ^ /%1/ [R=301]

RewriteRule ^(.*)/$ $1.php

THE_REQUESTこれは、元のリクエストの行全体と一致することに注意してくださいGET /index.php HTTP/1.1。2番目のルール(内部サブリクエストで一致する)の一部としてに%{REQUEST_URI}書き換えられた場合でも、書き換えられることはありません。これにより、書き換えられたURLがサブリクエストで一致せず、別のURLになります。リダイレクトがクライアントに返送されます。.php%{THE_REQUEST}.php

于 2012-01-01T03:10:50.847 に答える
1

最初のルールからLフラグを削除します。これにより「実行」が停止し、2番目のルールは使用されません。2番目のルールでは、Lフラグを保持する必要があります。これは、最後のルールだからです。

于 2012-01-01T03:11:38.097 に答える