mod_rewrite麻烦

时间:2012-06-16 13:58:58

标签: php html mod-rewrite url-rewriting

所以我使用了一个简单的重写规则,如:

RewriteEngine On
RewriteRule    ^foo/?$    foo.php    [NC,L]

它完全重定向到foo.php,但似乎foo.php中的所有链接和图像都是从不存在的服务器上的文件夹foo中获取的。例如,1.png现在将是foo / 1.png或index.html现在将是foo / index.html。所以我的问题是:有没有办法在不改变foo.php中文件的路径的情况下做正确的事情?

3 个答案:

答案 0 :(得分:1)

访问者的浏览器会将当前页面视为/foo/,因此所有相对网址都将在/foo/下解析。您需要设置base URL,或更新所有相对网址以指向您的网站根目录(例如,不要使用relative/path/url.jpg,而是/relative/path/url.jpg)。

答案 1 :(得分:1)

在您的代码中,您应该为您的资源(图片,CSS等)提供重写规则,或者为真实文件/文件夹添加条件,例如......

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

两条RewriteCond行测试是否请求的URL指向实际的真实目录(!-d部分),第二行测试它是否是真实文件(!-f)

将来,您可以通过在.htaccess文件中添加以下两行来轻松调试mod_rewrite内容:

RewriteLogLevel 3
RewriteLog "/path/to/a/file.log"

答案 2 :(得分:0)

2种简单方法

  1. 根据Ianzz
  2. 的建议对参考文献进行绝对化
  3. 仍然使用htaccess

    删除引用对象的foo路径

    RewriteRule ^ foo(/.*。(jpg | html | gif | css))$ $ 1 [L]

  4. 我更喜欢第二种解决方案,因为htaccess可以解决问题并且htaccess可以修复这种情况,并且不需要对代码进行任何更改。