Php mod_重写故障

Php mod_重写故障,php,html,mod-rewrite,url-rewriting,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中文件的路径的情况下使事情变得正确 访问者的浏览器将当前页面视为位于/foo/

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

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中文件的路径的情况下使事情变得正确

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

在代码中,您应该为资源(图像、css等)提供重写规则,或者为实际文件/文件夹添加条件,例如

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
第二行测试请求的URL是否指向一个实际的真实目录(即!-d部分),第二行测试它是否是一个真实的文件(!-f)

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

RewriteLogLevel 3
RewriteLog "/path/to/a/file.log"
2个简单的方法

  • 按照Ianzz的建议将参考资料绝对化
  • 删除仍使用htaccess的引用对象的foo路径

    重写规则^foo(/.*(jpg | html | gif | css))$$1[L]

  • 我更喜欢第二种解决方案,因为htaccess可以解决问题,htaccess可以解决问题,并且不需要对代码进行任何更改

    没有不改变道路的好办法。如果可能的话,就这么做。