PHP重写规则不适合查询字符串


PHP rewrite rule is not working for query string

我在htaccess文件中编写了以下规则,以将查询字符串更改为目录结构

 RewriteRule ^dashboard/([0-9]*)?$ dashboard.php?user_id=$1

用于重写url。它在

上工作正常
localhost/project/dashboard // (dashboard.php)

和所有链接都是

localhost/project/css/style.css
localhost/project/js/script.js

但是当我添加id

localhost/project/dashboard/1 // (dashboard.php?user_id=1)

它将所有链接更改为

localhost/project/dashboard/css/style.css
localhost/project/dashboard/js/script.js

为什么将dashboard附加到所有链接

如何在html文件中引用style.css ?

如果你像这样设置href="css/style.css", HTML不会知道你在重写,它会认为/1是一个文件夹,并会查看dashboard/css/style.css

任何使用url重写的系统通常都必须写出样式和脚本的所有路径来避免这种情况。所以你必须像这样参考你的风格href = " http://localhost/project/css/style.css "

如果您有一个生产和开发环境,它将帮助您使用像

这样的变量
if($SERVER['SERVER_NAME']=='localhost'){
  $BASE_URL = "http://localhost/project/"
}else{
  $BASE_URL = "http://mydomain.com/"
}

,并把它放在任何css,脚本或图像调用之前div;)

那是因为你"告诉他"那样做。

RewriteRule ^dashboard/([0-9]*)?$ dashboard.php?user_id=$1
         //  ^here you tell him to print that "dashboard"

当然其他链接也可以——你甚至不需要用这个规则来匹配它们。

我在这里找到了一些东西,向下滚动到标题"条带查询字符串"。这里,它让你这样做:

RewriteCond %{QUERY_STRING} example=
RewriteRule (.*) http://www.domain.com/$1? [R=301]

当然,把url改成你自己的。