Php Url重写中断了到css的链接
我正在使用以下url重写设置:Php Url重写中断了到css的链接,php,html,css,.htaccess,url-rewriting,Php,Html,Css,.htaccess,Url Rewriting,我正在使用以下url重写设置: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 在index.php中,是parse$\u GET['url'],因此在以下示例中: ROOT/user/id/1/name/bobby // user is the page
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
在index.php
中,是parse$\u GET['url']
,因此在以下示例中:
ROOT/user/id/1/name/bobby // user is the page, id = 1, name = bobby
ROOT/blog/post/123/title/welcome // blog is the page, post = 123, title = welcome
# For URL = public/
project/view/css/common.css // good
# For URL = public/index/
project/public/view/css/common.css // broken
# For URL = public/index/key/value
project/public/index/key/view/css/common.css // broken
因此,第一个参数(?我不知道如何调用它)是页面名称,接下来的两个参数类似于“keys/value”。
现在,当我浏览ROOT/
时,插入到页面html中的样式表链接和页面被正确显示。
I fi browseROOT/index
(与ROOT/
相同)它正确显示页面(包含内容和其他内容),但未加载指向样式表的链接(即使在html结构中正确写入)。我可以从我的页面在加载时根本没有css这一事实看出这一点
我怎样才能解决这个问题
编辑
css文件的路径如下所示:
project/view/css/common.css
包含它的文件位于中
project/public/index.php // the one with .htaccess and rewrite rules
这使我创建了一个链接(在index.php内),如
但这取决于url的外观。例如:
ROOT/user/id/1/name/bobby // user is the page, id = 1, name = bobby
ROOT/blog/post/123/title/welcome // blog is the page, post = 123, title = welcome
# For URL = public/
project/view/css/common.css // good
# For URL = public/index/
project/public/view/css/common.css // broken
# For URL = public/index/key/value
project/public/index/key/view/css/common.css // broken
您可以尝试从重写规则中删除某些文件扩展名,例如,以下规则将忽略图像、css和js文件
# Do not process images or CSS files further
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
编辑:我将这样应用它:
RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
注释不允许我格式化代码,请尝试以下操作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*\.(css|jpe?g|gif|png|js|ico)$ [NC]
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
更新
您可以在页面的
部分尝试类似的操作,以支持该页面上引用的图像/css/js文件的相对路径:
<head>
<base href="http://www.example.com/static-files/" />
</head>
我认为您有两个问题(因为给出的答案还没有解决您的问题……):
css/index.css
时,您的重写会将其转换为index.php?url=css/index.css
@科尔2的回答应该能解决这个问题/user/id/1/name/bobby
转换为/index.php?等…
但是当浏览器请求css文件(例如,代码中类似css/index.css
的css文件)时,它实际上会请求/user/id/1/name/bobby/css/index.css
,而该文件不存在。您可以通过只使用外部文件(css、js、图像等)的绝对路径来解决这个问题,如/css/index.css
project/public
目录(如project/public/css
)/css/index.css
html中的css链接是什么样子的?它们是否有前面的斜杠?@davogotland,我的链接看起来像真正的路径链接。@davogotland,它们看起来像这样,请在重写引擎打开后将其放入line@cOle2,不工作。我也更新了我的问题。请看一看。看一看@jeroen的答案,因为听起来你的路径是相对的。简单的解决方案是在css文件路径的开头加一个斜杠:/project/view/css/common.css@anubhava update也应该可以。我认为这是一个好方法。问题是我正在使用相对路径,如“./view/css/common.css”来访问返回到公用文件夹的文件夹中的文件。我怎样才能将其转换为绝对路径?@Charlie Pigarelli与目录结构相比,您的web服务器的根是什么?如果它是
project/public/
,则您的css文件不可公开访问,因此您需要将它们移动到project/public/
目录。用户浏览的目录是project/public/
,因此他无法访问所有其他文件夹,例如project/class/
或project/library/
或项目/视图
。当css文件位于project/view/css/common.css
@Charlie Pigarelli时,这就是问题所在,用户无权访问项目/视图
目录中的css文件。@Charlie Pigarelli:请尝试添加基本标记以支持页面上静态文件的相对URL:eg
+1这是我正在寻找的一行,用于阻止我对重写外部内容的请求!