我有一个自定义的 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 还不够好,还没有做到这一点。感谢您提前提供任何答案。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Run Code Online (Sandbox Code Playgroud)
但是,我不能对这个特定的网站这样做,因为它是服务器上的一个子文件夹,因此链接到/将转到服务器的根目录而不是站点。
如果我/subfolder/css为网站上的每个链接都添加了,那不仅会变得乏味,而且要更改子文件夹也会有问题。有没有更好的方法来解决这个问题?
其他说你必须绝对化路径的答案是正确的。如果您在子文件夹中工作,您可以/应该做两件事来提供帮助:
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 时都要考虑这一点,这需要一些额外的工作,但从长远来看,它会对您很有帮助。
| 归档时间: |
|
| 查看次数: |
6136 次 |
| 最近记录: |