我有一个自定义的 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/