使用.htaccess执行2条规则时出现意外结果

时间:2013-05-11 08:21:11

标签: apache mod-rewrite url-rewriting

我正在使用PHP开发Web应用程序 我想要干净的URL,所以我为它写了一个.htaccess文件。一切都很好,但仅限1条规则 请看下面的代码:

RewriteEngine on
Options +FollowSymLinks

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rule No.1
RewriteRule ^(.*)/(.*)/(.*)/?$ index.php?page=$1&id=$2 [NC,N]

# Rule No.2
RewriteRule ^(.*)/?$ index.php?page=$1 [NC,L]

这是我的.htaccess文件内容 如果我删除规则No.1,页面类似www.site.com/news,那么一切正常。但是当我想导航到页面www.site.com/news/1/sample-text时,所有CSS,JavaScript和图像文件都将被破坏(我再也无法访问它们了。)
虽然我在.htaccess文件中编写了规则2,但是任何东西都没有用,问题就在于钢铁。

所有图片,css和javascript路径都与./js/jquery.js格式类似  另外,我将RewriteBase /放在.htaccess文件中。但是...... :(

请帮帮我。

1 个答案:

答案 0 :(得分:0)

如果它们是这样的话规则会更好:

# Rule No.1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)/?$ index.php?page=$1&id=$2 [L]

# Rule No.2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?page=$1 [L]

=>你需要在这里重复RewriteCond行:它们只适用于后面的RewriteRule。

注意:

  • NC标志(不区分大小写)在这里没用了
  • 第一条规则不使用$ 3
  • ([^ /] +)比(。*)
  • 更有意义