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

alg*_*der 16 html css .htaccess mod-rewrite

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

RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1
Run Code Online (Sandbox Code Playgroud)

当我这样做时,网站使用适当的css文件进行样式设置 site.com/name_of_user

但不是我做的时候 site.com/name_of_user/

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

感谢帮助!

小智 25

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

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

RewriteCond %{REQUEST_FILENAME} !-f
Run Code Online (Sandbox Code Playgroud)

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


Que*_*ery 14

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

<base href="http://www.example.com/" />
Run Code Online (Sandbox Code Playgroud)

它非常干净,易于使用.


Cha*_*mal 12

链接相对于根目录示例的css文件:

<link rel="stylesheet" type="text/css" href="/css/****.css">
Run Code Online (Sandbox Code Playgroud)

  • 与OP相同的问题; (样式正在"site.com/aaa"上工作,但没有在"site.com/aaa/bbb"上工作); 不得不将`href ="css/***.css`更改为`href =/css/***.css`.谢谢! (2认同)

anu*_*ava 8

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

例如,如果样式标记是:

<link rel="stylesheet" type="text/css" href="static/style.css">
Run Code Online (Sandbox Code Playgroud)

并且您当前的网页网址是:

http://example.com/name_of_user/
Run Code Online (Sandbox Code Playgroud)

然后浏览器将解析css URL 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="/" />
    
    Run Code Online (Sandbox Code Playgroud)

以便从该基本URL解析每个相对URL,而不是从当前页面的URL解析.


uxm*_*mal 6

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

<head>
  <base href="http://example.com/">
<head>
Run Code Online (Sandbox Code Playgroud)

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

RewriteEngine On
RewriteBase /
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1 
Run Code Online (Sandbox Code Playgroud)

不会<base href="http://example.com/">在文档中使用此行为<head>.它将正常工作,尤其是对于相对站点文件结构.