php - .htaccess 的相对 URL

标签 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,即使我们仍然处于域的根级别。

澄清一下:

转到 http://domain.tld/page 并在 HTML 中请求 res/css/style.css 返回一个样式表。

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

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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

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

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

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

最佳答案

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

1) 在你的 htaccess 文件中使用 RewriteBase

RewriteEngine on
RewriteBase /framework/

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

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

define('FULL_PATH', '/framework');

然后每次你在 html 中创建一个 URL 时,确保你做类似的事情

<a href="<?= FULL_PATH ?>/your/remaining/path">

每次在页面上创建 URL 时都要考虑这一点,但从长远来看,这对您很有帮助。

关于php - .htaccess 的相对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7616201/

相关文章:

php - 除了 root 之外,Laravel 路由不起作用

.htaccess - 这个 HTTP 授权重写规则有什么作用?

php - 检查 htaccess 中的 Zend 注册表变量?

php - 没有 mod_rewrite,没有 .htaccess 的漂亮 URL

php - Div 在刷新时更改位置,但在键入 URL 时不更改

gd 的 php 包装器类

PHP session 获取正确值

java - 我如何加密和解密在 PHP 和 JAVA 之间使用 AES/GCM/

php - 当用户不再在线时更新数据库

php - 使用 php 从数据库创建页面 [就像框架或 cms 正在做的那样]