网址重写打破了与CSS的链接

时间:2011-03-28 17:44:31

标签: php html css .htaccess url-rewriting

我正在使用以下设置进行网址重写:

RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

index.php中解析$_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

因此,第一个参数(?我不知道如何调用它)是页面名称,那么以下几个参数就像“键/值”。 现在,当我浏览ROOT/链接到页面html中插入的样式表并正确显示页面时。 我浏览ROOT/index(与ROOT/相同)它正确显示页面(包含内容和其他内容)但是链接(即使在html结构中正确写入)到样式表也不是加载。我可以看到,当我加载它时,我的页面根本没有css。

我该如何解决这个问题?

修改

css文件的路径如下:

project/view/css/common.css

包含的文件位于

project/public/index.php // the one with .htaccess and rewrite rules

这让我建立了一个链接(在index.php中),例如

../view/css/common.css

但这取决于网址的显示方式。例如:

# 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

3 个答案:

答案 0 :(得分:7)

评论不允许我格式化代码,请你试试这个:

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]

更新

您可以在页面的<head>部分尝试这样的操作,以支持该页面上引用的image / css / js文件的相对路径:

<head>
<base href="http://www.example.com/static-files/" />
</head>

答案 1 :(得分:4)

我认为你有两个问题(因为给定的答案还没有解决你的问题......):

  1. 您正在重写所有文件名,因此当浏览器请求css/index.css时,您的重写会将其转换为index.php?url=css/index.css。 @ cOle2的答案应该解决这个问题。

  2. 您没有为css文件使用绝对路径。服务器正在将请求的页面翻译为/user/id/1/name/bobby/index.php?etc....,但当浏览器请求代码中的css/index.css css文件时,它实际上会请求/user/id/1/name/bobby/css/index.css并且该文件不存在。您可以通过仅使用外部文件(css,js,图像等)的绝对路径来解决这个问题,例如/css/index.css

  3. 修改:根据您的评论,您的路径都是相对的,浏览器无法访问您的css,因此您需要:

    1. 将css移至project/public目录(如project/public/css
    2. 使用/css/index.css等css的绝对路径。
    3. 确保服务器不会重写外部文件的URL。

答案 2 :(得分:2)

您可以尝试从重写规则中删除某些文件扩展名,例如以下规则将忽略图像,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]