我有.htaccess
个文件,这是其中的一个脚本:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^register/$ index.php?c=Page&a=register [L]
</IfModule>
在我的布局文件中,我用这样的绝对路径加载css和js:
<link href="/public/assets/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="/public/assets/bower_components/bootstrap-extension/css/bootstrap-extension.css" rel="stylesheet">
我访问localhost/project/register/
但
由于错误而未加载css / js文件:
GET http://localhost/public/assets/bootstrap/dist/css/bootstrap.min.css net::ERR_ABORTED
为什么它会在/public
之后直接访问localhost
?它应该是localhost/project/public
而不是localhost/public
如果我删除第一个/在css链接,则可以访问localhost/project/register/public
答案 0 :(得分:4)
您的css链接不正确。它以/public
开头,这意味着Apache将尝试在站点根目录下的public
文件夹中找到它。
您应该更新您的相对路径:
<link href="public/assets/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="public/assets/bower_components/bootstrap-extension/css/bootstrap-extension.css" rel="stylesheet">
然后在页面的<head>
部分的HTML下面添加:
<base href="/project/" />
以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。
替代HTML中的<base ../>
标记,您可以在.htaccess中使用此重定向规则作为第一条规则:
RewriteRule ^public/.+\.(?:css|js)$ /project%{REQUEST_URI} [L,NC,NE,R=301]
但请注意,重定向规则(即使使用R=301
)仍会使新客户端向您的网络服务器发送2个请求。首先使用/public/...
URI,然后重定向后使用第二个/project/public/...
URI。
答案 1 :(得分:0)
似乎你有两个不同的问题。
对于您的问题,您所显示的.htaccess规则中没有任何内容会改变现有.css或.js文件的显示方式。因此,很可能您的链接之前没有工作,或者您之前在文件中有其他内容,以不同方式重写您已删除的URL。该文件只是声明如果给出了URL并且没有与之匹配的文件或目录,则重写某个URL的URL。这似乎是一个错误,因为URL存在或不存在。
您的第二个问题是关于网址以及您没有/project
的原因。我不确定你为什么认为他们应该有/project
,但我假设你已经假设,因为你原来的HTML在那个目录中。您正在使用/
开始链接,例如/public/assets/bootstrap/dist/css/bootstrap.min.css"
。 /
表示路径是绝对路径,而不是相对路径,这意味着路径直接在主机名之后启动。如果删除初始/
,则路径将相对于调用它的URL。
答案 2 :(得分:0)
如果您要相对于域根加载这些文件且public
目录不在域根目录中,则您需要提供 完整 域相对路径:
<link href="/project/public/assets/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="/project/public/assets/bower_components/bootstrap-extension/css/bootstrap-extension.css" rel="stylesheet">