htaccess文件中的资源被解释为样式表,但传输时使用了text/html MIME类型。

3

我想把现有的url从http://localhost/website/article.php?id=5重新写成http://localhost/website/article/5,因此我的htaccess代码如下:

RewriteBase /website/
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule article/([a-zA-Z0-9@.-])? article.php?id=$1 [L]

我得到的是 资源被解释为样式表,但其MIME类型为text/html:“http://localhost/website/article/css/bootstrap.min.css”。 看起来article被添加到文件的URL中,甚至重定向了文件目录。
真正的URL应该是"http://localhost/website/css/bootstrap.min.css"
我对htaccess非常陌生,试图通过复制现有的htaccess创建自己的htaccess。 修改后内容 我的实际问题是我的资源URL也被重命名了。 我已将代码行减少到2行。
RewriteEngine On
RewriteRule article/([0-9@.-])  article.php?id=$1 

但是现在资源被重定向到不存在的http://localhost/website/article/js/main.js,而不是http://localhost/website/js/main.js

也许你需要将/css/bootstrap.min.css放入你的标记link元素中? - Pavlo Zhukov
1
你知道吗,条件只用于第一个RewriteRule吗?文章重写规则总是被执行。 - Ivo P
3个回答

2
检查主HTML文件中的URL;我怀疑浏览器在到达重写规则之前请求了错误的URL。如果你有像<script src="js/main.js">这样的相对URL,在未被重写的版本中,浏览器将把它解析为http://localhost/website/js/main.js,但在被重写的版本中,它将解析为http://localhost/website/article/js/main.js,因为从浏览器的角度来看,HTML文件位于目录http://localhost/website/article/中,所以它是基于该目录解析的。如果这是问题所在,你可以将其改为src="/website/js/main.js"src="../js/main.js"

0

添加重写条件以排除静态文件的重写:

RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]

0

我更喜欢以以下方式开始重写规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule  - [L] 

它将排除所有现有的文件(-f)和目录(-d)不被重写,包括.php文件和css文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接