我有以下用户个人资料网址的简写
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1
当我执行site.com/name_of_user
但不是我做site.com/name_of_user/
虽然重定向是在右页......
非常感谢帮助!
答案 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,您的页面将显示没有任何样式,脚本和图像。
您可以使用以下方法之一解决此问题:
在css,js,images文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以http://
或斜杠/
开头。
其他您可以在页面HTML的 <head>
部分下方添加:
<base href="/" />
以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。
答案 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]