mod_rewrite URL掩码不合作

时间:2011-10-20 21:18:38

标签: php .htaccess mod-rewrite

我的.htaccess

中有以下内容
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^task/(.*)/?$ index.php?mode=task&id=$1 [L]
RewriteRule ^(.*)/?$ index.php?mode=$1 [L]

如果包含最后一行,无论在网址中添加什么,都会将$ _GET ['mode']设置为 index.php 。如果没有包含最后一行,或者如果我将它设置为index.php?mode = home,那么它可以正常工作,但是没有捕获。

我不知道问题是什么,但它可能很简单。如果其他人可以花一点时间引导我,那就太好了。谢谢!

1 个答案:

答案 0 :(得分:1)

当您将其应用于/task/123时,会发生这种情况,(假设URI不存在):

  1. 传递!-f,/ task / 123不是存在的文件
  2. 传递!-d,/ task / 123不是存在的目录
  3. ^task/(.*)/?$匹配,以便将URI重写为index.php?mode=task&id=123
  4. 使用[L],没有其他任何事情发生,请求被内部重定向index.php?mode=task&id=123
  5. 内部重定向会重新应用所有规则< ---这就是让你失望的原因
  6. ^task/(.*)/?$不匹配,什么都不做
  7. ^(.*)/?$匹配,因此URI会被重写为index.php?mode=index.php
  8. 初始URL等于重写的URL:index.php,停止重写
  9. 您需要做的是为第二条规则添加条件:

    RewriteCond %{REQUEST_URI} !^/index.php
    RewriteRule ^(.*)/?$ index.php?mode=$1 [L]