php request_uri返回图像路径


php request_uri returns image path

最近我开始用php为url编写一个url路由脚本,如下所示:

http://www.example.com/messages/drafts

为了获得这种效果,我使用了一个.htaccess文件,其中包含以下内容:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.co [NC]
RewriteRule (.*) http://www.example.co/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]

现在,请求页面的模板是通过页面类加载的,然后在这些页面上有switch语句来确定要执行的命令。。。所以:

http://www.example.com/messages/drafts

将是;加载messages.php并执行drafts命令,但必须登录才能执行此操作。因此,如果你没有登录,它会将你重定向到一个登录页面,并设置一个会话变量,其中包含错误消息和上一个受限制的页面。

出于某种原因,当url不仅仅包含/messages或/user_home等时,它会将会话变量设置为/messages/img/bg.jpg…

结尾是登录页面上图像的路径。

我将会话设置为$_SESSION['last_page'] = $_SERVER['REQUEST_URI'];,然后在其他地方进行验证。

有人知道为什么会发生这种事吗?我觉得问题出在.htaccess.上

当页面加载完成后,我会回显请求uri,它就是它应该是的。

在使用相对链接时,我也遇到过类似设置的问题。问题是Apache试图像处理任何其他请求一样处理您的背景图像。作为一种变通方法,我使用绝对路径:

background-image: url:("http://yoursite.com/images/background.png");

而不是:

background-image: url:("/images/background.png");

我不知道是否有更优雅的解决方案,但对我来说,这很好。

澄清:

我的意思是说你的重定向是有效的,但当网络服务器解析你的登录页面时,它会像处理地址栏中写的任何url一样处理对背景图像的引用。

亲属路径和url重写也有问题,因为当你打开www.yoursite.com/something,然后有一个与亲属路径/image.png的链接时,这被解释为www.yoursite.com/omething/image.png