0

ユーザーがhttp://example.com/user/user-nameと入力したときに、ユーザーの詳細を表示するhttp://example.com/user/user-nameにリダイレクトできるようにしたい

これは私が使用しているものですが、エラーが発生します

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^.*$ /user/ [R]

Firefoxが与えるエラーは

リダイレクト ループ

Firefox は、サーバーがこのアドレスへのリクエストを決して完了しない方法でリダイレクトしていることを検出しました。ブラウザーは、要求されたアイテムの取得を停止しました。サイトは、完了しない方法でリクエストをリダイレクトしています。

  • このサイトに必要な Cookie を無効またはブロックしましたか?
  • 注: サイトの Cookie を受け入れても問題が解決しない場合は、コンピューターではなく、サーバーの構成に問題がある可能性があります。

ありがとう

4

4 に答える 4

5

確かにリダイレクトループがあります。domain.com/user/user-nameからdomain.com/user/user-name(同じ URL)に移動しようとしています。何が起こるか:

  1. ユーザーがアクセスしdomain.com/user/user-nameます。
  2. domain.com/user/user-nameユーザーは(同じ場所) にリダイレクトされます。
  3. domain.com/user/user-nameユーザーは(同じ場所) に再度リダイレクトされます。
  4. domain.com/user/user-nameユーザーは(同じ場所) に再度リダイレクトされます。
  5. 吐き気を繰り返す…

おそらく、何かにリダイレクトdomain.com/user/user-nameするつもりでしたdomain.com/users.php?u=userか?

于 2009-04-09T08:43:30.157 に答える
3

それ自体を含むすべてを /user/ にリダイレクトしています。

編集: すべてのリクエストは同じ一連の書き換えを実行し、^.*$ の正規表現が一致するため、/user/ を /user/ に再度リダイレクトします。ブラウザーは、同じ URL で数回試行した後にループを停止することで、ユーザーを支援しているだけです。

/a/foo を /b/foo にリダイレクトする場合は、次のようなものが必要です。

RewriteRule ^/a/(.*)$ /b/$1 [R]

..しかし、最初の例のようにソースと宛先が重複しないようにする必要があります。そうしないと、無限のリダイレクト ループが発生します。

于 2009-04-09T09:03:29.003 に答える
1

他の人がすでに言ったように、RewriteRule任意のURIパス(を含む/user/)に一致するため、無限ループになります。

これを回避するには、次のURIパスを除外する必要があります。

# either
RewriteRule !^/user/$ /user/ [R]
# or
RewriteCond %{REQUEST_URI} !^/user/$
RewriteRule ^ /user/ [R]

これらのルールは、に一致しないすべてのURIパスをリダイレクト^/user/$/user/ます。このルールを.htaccessファイルで使用する場合は、RewriteRuleディレクティブのパターンの先頭のスラッシュを削除する必要があります(つまり、 ^user/$)。

于 2009-04-09T09:51:46.593 に答える
1

これらの 2 つの URL は同じではありませんか?

編集:私が答えたとき、質問はエラーではなく必要性のみを述べました

于 2009-04-09T08:39:32.350 に答える