1

我在 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到所有链接

4

2 回答 2

1

这是因为你“告诉他”这样做。

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

当然,其他链接也有效——您甚至不将它们与该规则匹配。

我在这里找到了你的东西,向下滚动到标题“Strip Query Strings”。在那里,它说你这样做:

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

当然,只需将该网址更改为您自己的网址。

于 2013-03-28T13:55:44.550 回答
1

您的 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、脚本或图像的任何调用之前;)

于 2013-03-28T14:02:07.690 回答