添加htacess

时间:2018-03-09 18:32:27

标签: php regex .htaccess

我有.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

3 个答案:

答案 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">