4

我在重写 url 时遇到了问题。以下情况正在发生:

http://www.example.com/scores
http://www.example.com/registreren
http://www.example.com/login

这些 url 将被重定向到index.php?route=scoresetc

这一切都很好。但是现在我在一个子目录中有模板文件,比如imagesand stylesheet。这些文件在

  • template/css/style.css
  • images/images.pngETC

现在所有这些文件也被重定向到index.php?route. 我知道前导斜杠和文件的所有链接都是绝对路径。

文件中使用了以下代码.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ index.php?route=$1 [L,QSA]
4

2 回答 2

1

尝试使用以下代码添加 RewriteBase:

RewriteBase /

根据服务器配置,可能会%{REQUEST_FILENAME}在开头包含斜杠,这将产生绝对路径而不是相对路径。

于 2012-04-11T10:21:22.887 回答
0
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

如果静态资源被 HTML 源代码中的根相对(或绝对)URL 正确引用(并且没有冲突BASE元素),那么这些条件应该已经排除了静态资源被重写。

您可以向您的前端控制器添加一个条件,排除对特定文件扩展名的请求(假设您需要重写的 URL 也不共享这些文件扩展名)。

这也是任何前端控制器的推荐优化,因为它可以防止对静态资源进行不必要的文件系统检查——如果没有找到(而不是通过框架路由),它将简单地默认为 404。

例如:

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|png|gif)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ index.php?route=$1 [L,QSA]

只有当请求的 URL 不以所述文件扩展名之一结尾时,它才会执行文件系统检查并可能将 URL 重写到index.php(前端控制器)。

于 2020-01-17T03:14:45.010 回答