0

我正在使用 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 文件内容。
如果我删除第 1 条规则,并且页面类似于www.site.com/news,则一切正常。但是当我想导航到 pagewww.site.com/news/1/sample-text时,所有 CSS、JavaScript 和图像文件都会被破坏(我无法再访问它们了)。
虽然我在 .htaccess 文件中写了第 2 条规则,但没有任何效果,问题是钢铁还活着。

所有图像、css 和 javascript 路径都类似于./js/jquery.js格式。
另外,我放入RewriteBase /了 .htaccess 文件。但 ... :(

请帮我。

4

1 回答 1

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
  • ([^/]+) 比 (.*) 更有意义
于 2013-05-11T09:37:25.677 回答