带有 .htaccess 的相对 URL

ele*_*119 5 php .htaccess

我有一个自定义的 PHP 框架,其中域之后的所有内容都作为 $_GET 变量发送到 PHP,如下所示:

RewriteRule ^(.*)$ index.php?page_request=$1 [QSA,L]

所有路由都是由一个路由器文件完成的。例如,http://domain.tld/page被发送到http://domain.tld?page_request=home.

但是,如果我有一个类似目录的结构(即http://domain.tld/page/),则发送请求,但HTML中的任何相对 URL现在都相对于/page,即使我们仍处于域的根级别。

澄清:

在 HTML 中访问http://domain.tld/page和请求res/css/style.css返回一个样式表。

转到http://domain.tld/page/并请求res/css/style.css返回 404 错误,因为该page/目录实际上并不存在。

解决此问题的最佳方法是什么?这看起来真的很简单,但我对 .htaccess 还不够好,还没有做到这一点。感谢您提前提供任何答案。

编辑:另外,我的 .htaccess 文件包含:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Run Code Online (Sandbox Code Playgroud)

编辑 #2:是的,我知道使用前导 /。

但是,我不能对这个特定的网站这样做,因为它是服务器上的一个子文件夹,因此链接到/将转到服务器的根目录而不是站点。

如果我/subfolder/css为网站上的每个链接都添加了,那不仅会变得乏味,而且要更改子文件夹也会有问题。有没有更好的方法来解决这个问题?

And*_*rew 4

其他说你必须绝对化路径的答案是正确的。如果您在子文件夹中工作,您可以/应该做两件事来提供帮助:

RewriteBase1)在你的htaccess文件中使用

RewriteEngine on
RewriteBase /framework/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$    index.php?url=$1    [QSA,L]
Run Code Online (Sandbox Code Playgroud)

2)在框架中创建一个具有相同路径的常量

define('FULL_PATH', '/framework');
Run Code Online (Sandbox Code Playgroud)

然后每次在 html 中创建 URL 时,请确保执行类似的操作

<a href="<?= FULL_PATH ?>/your/remaining/path">
Run Code Online (Sandbox Code Playgroud)

每次在页面上创建 URL 时都要考虑这一点,这需要一些额外的工作,但从长远来看,它会对您很有帮助。