php request_uri返回图像路径

时间:2013-07-31 10:02:27

标签: php session url-routing

最近我开始在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,它应该是它。

1 个答案:

答案 0 :(得分:1)

使用相对链接时,我遇到了类似设置的问题。问题是Apache尝试处理您的背景图像的方式与处理任何其他请求的方式相同。作为一种解决方法,我使用绝对路径:

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

而不是:

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

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

<强>澄清:

我的意思是说您的重定向正在运行,但是当Web服务器正在解析您的登录页面时,它会像对地址栏中写入的任何URL一样处理对背景图像的引用。

亲戚路径和网址重写也存在问题,因为当您打开www.yoursite.com/something然后链接到相对路径/image.png时,这被解释为www.yoursite.com/东西/ image.png