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