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-namedomain.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-namedomain.com/users.php?u=user或其他什么?

于 2009-04-09T08:43:30.157 回答
3

您正在将所有内容重定向到 /user/ ,包括它自己。

编辑:每个请求都经过相同的重写集,并且由于您的 ^.*$ 正则表达式匹配,您将 /user/ 再次重定向到 /user/ 。浏览器只是通过在同一 URL 上尝试几次后停止循环来帮助您。

如果您希望将 /a/foo 重定向到 /b/foo,则需要以下内容:

重写规则 ^/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/$to /user/。如果要在 .htaccess 文件中使用此规则,则必须删除RewriteRule指令模式中的前导斜杠(因此只需^user/$)。

于 2009-04-09T09:51:46.593 回答
1

这两个网址不一样吗?

编辑:当我回答时,问题只说明了需要,而不是错误

于 2009-04-09T08:39:32.350 回答