【发布时间】:2019-11-24 10:50:03
【问题描述】:
所以我尝试做一些简单的事情,只是想更改网址,例如:
website.com/user?slug=usernameexample 到 website.com/user/usernameexample 我使用了下面的代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?user/([^/d]+)/?$ user.php?slug=$1 [L,QSA]
看起来很简单,但令我惊讶的是,这是一个小小的噩梦,因为在 URL website.com/user/usernameexample 中,所有文件(如 css/js 和其他文件)都将无法工作,因为会尝试在“用户”目录中打开而那不是全部...而且所有链接和文件都将尝试相同,例如login.php 也将尝试在不存在的“用户”文件夹中打开...
在阅读了许多 stackoverflow 答案后,最常见的答案似乎是“绝对路径”或<base href="http://www.example.com/" />...但是“基本 href”答案并不能真正正常工作,因为这会带来其他问题......所以看起来“绝对路径”是唯一可行的答案?
我想知道是否有其他解决方案...我确实尝试了一些小的 htaccess 更改,但它们对我不起作用...
【问题讨论】:
-
您如何在 PHP 脚本以及其他 PHP 脚本中引用 CSS 和 JS 文件?
-
@Dave 类似于 href="assets/css/style.css"
-
没有“小改动”可以解决根本问题,从客户端的角度来看,
/user/是当前路径,因此它将解决 all 与此相关的相对 URL。如果您不想指定base元素(个人也不是它的粉丝),那么以/开始所有相关引用是最常见和可行的解决方案。如果这也为您带来了“其他问题”,请解释这些问题是什么。 -
!-f/!-d测试文件或目录是否存在于磁盘上,如果存在,则将不处理以下规则。如果您的 CSS/JS 存在于磁盘上,则此规则将不影响它们。 KISS - 您的正则表达式表示前导/user/是可选的,这意味着它将匹配 any 请求。试试:user/(.+) user.php?slug=$1 [L,QSA]。 There really 是 so many 重复 here on SO。