使用htaccess重写规则重定向后不加载CSS

时间:2011-11-22 01:54:20

标签: html css .htaccess mod-rewrite

我有以下用户个人资料网址的简写

RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1

当我执行site.com/name_of_user

时,网站会使用相应的css文件进行样式设置

但不是我做site.com/name_of_user/

的时候

虽然重定向是在右页......

非常感谢帮助!

12 个答案:

答案 0 :(得分:23)

解决此问题的最简单方法是在HTML文件的<head>中指定CSS文件的完整路径。

如果您的mod_rewrite规则正在修改CSS文件所在的路径,那么您还需要将其放在RewriteRule之前:

RewriteCond %{REQUEST_FILENAME} !-f

这可以确保请求在重写之前与文件不匹配。

答案 1 :(得分:12)

我遇到了同样的问题,并找到了最简单,最实用的解决方案。

<base href="http://www.example.com/" />

它非常干净且易于使用。

答案 2 :(得分:11)

链接相对于根目录的css文件 样品:

<link rel="stylesheet" type="text/css" href="/css/****.css">

答案 3 :(得分:8)

当您的网页网址为example.com/name_of_user/时,如果您的HTML网页对这些资源使用相对路径,则加载资源css / js / images可能会出现问题。这是因为浏览器使用当前URL解析资源URL。

例如,如果样式标记是:

<link rel="stylesheet" type="text/css" href="static/style.css">

,您当前的网页网址为:

http://example.com/name_of_user/

然后,浏览器将解析css网址,而不是example.com/name_of_user/static/style.css,而不是example.com/static/style.css。这将导致404资源URL,您的页面将显示没有任何样式,脚本和图像。

您可以使用以下方法之一解决此问题:

  1. 在css,js,images文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以http://或斜杠/开头。

  2. 其他您可以在页面HTML的 <head>部分下方添加

    <base href="/" />
    
  3. 以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。

答案 4 :(得分:6)

尝试在html文档主管部分设置正确的基础:

<head>
  <base href="http://example.com/">
<head>

然后,.htaccess规则中的任何额外斜杠(/)都不会更改html文档中的外部源路径。以下规则

RewriteEngine On
RewriteBase /
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1 

不会在文档<base href="http://example.com/">中使用<head>发生此行为。 它可以正常工作,特别是对于相对站点文件结构。

答案 5 :(得分:2)

试试这个:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\.(gif|jpg|png|jpeg|css|js|swf)$ /public/$1.$2 [L,NC]

    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

</IfModule>

答案 6 :(得分:1)

RewriteCond %{REQUEST_FILENAME} !-f

这就像一种享受。即使给出绝对链接,我最初也有问题。谢谢你和史蒂夫刘易斯+1。

答案 7 :(得分:1)

最简单的方法是使用<base href="site url here">,这应该在打开HTML head标记后不久。 网站网址需要以http或https开头;如果你在localhost上,那么使用http,例如

http://localhost/road/ 

答案 8 :(得分:0)

我遇到了同样的问题。我试图从表单的网站重定向:    www.foo/category/details。

我发现“类别”之后的斜线既阻止了CSS,又阻止了图像的加载。

原因是默认重定向将原始URL传递给浏览器。这可以从window.location.pathname上的JScript跟踪中看出。解决方案只是在重写规则中使用[R]标志。

答案 9 :(得分:0)

使用此site.com/name_of_user/时,您将网站上的工作目录从root更改为name_of_user,因此请求网页上每个文件或链接的相对路径将变为{{ 1}}而不是/name_of_user/

要解决此问题,您需要向.htaccess添加其他规则:

/

答案 10 :(得分:0)

只需在开头标记后添加基本路径即可。例如:

<base href="website url here">

答案 11 :(得分:-1)

我遇到了同样的问题,我用以下代码解决了这个问题。不是最好的解决方案,但它有效。

RewriteRule ^(something/)$ something [R] 
RewriteRule ^(something)$ index.php?page=$1 [L]