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

时间:2013-03-28 13:45:17

标签: php url-rewriting

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

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

用于重写网址。

工作正常
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附加到所有链接

2 个答案:

答案 0 :(得分:1)

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

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

当然其他链接也可以使用 - 您甚至不会将它们与该规则匹配。

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

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

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

答案 1 :(得分:1)

你的html文件中引用了style.css如何?

如果你有这样的href =“css / style.css”,HTML不知道你正在重写,think / 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,脚本或图像之前将其放入 ;)