我正在通过youtube上的howcode尝试MVC教程,但发现htaccess不允许加载我的css和js文件。
.htaccess文件:
RewriteEngine On
RewriteRule ^([^/]+)/? index.php?url=$1 [L,QSA]
我试图通过互联网找到一些解决方案但最终会产生其他错误。我在规则之前使用了条件:
RewriteCond %{REQUEST_FILENAME} -f
但这似乎不起作用。
项目结构 -
我在项目中有这些文件
在Views文件夹中我有 -
我的所有导入都在header.php中,header.php包含在index.php
中我的链接css的代码是 -
<link href="./Views/css/style.css" rel='stylesheet' type='text/css' media="all" />
答案 0 :(得分:1)
我在规则之前使用了条件:
RewriteCond %{REQUEST_FILENAME} -f
条件与你想要实现的相反 - 逻辑是相反的。该条件测试文件是否存在,并且仅当文件存在时才处理RewriteRule
。只有当请求的文件 not 存在时,才需要执行规则。例如:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/? index.php?url=$1 [L,QSA]
请注意 CondPattern 上的!
前缀。这否定条件。
更新:请注意,上述RewriteRule
模式(即。^([^/]+)/?
)排除了对文档根目录的请求(即{{1} - 空 URL路径)。因此,对于此请求,PHP脚本中的http://example.com/
GET参数确实是 undefined 。但是,这应该没问题,只要你在使用它之前检查这个变量是否存在(如你所愿)。例如:
url
如果您明确希望为此类请求设置此参数(并处理您的指令)(尽管不必要),则需要从{{1}更改$url = isset($_GET['url']) ? $_GET['url'] : null;
模式到RewriteRule
,即。将^([^/]+)/?
(1或更多)更改为^([^/]*)/?
(0或更多)。