所以我使用了一个简单的重写规则,如:
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中文件的路径的情况下做正确的事情?
答案 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种简单方法
仍然使用htaccess
删除引用对象的foo路径RewriteRule ^ foo(/.*。(jpg | html | gif | css))$ $ 1 [L]
我更喜欢第二种解决方案,因为htaccess可以解决问题并且htaccess可以修复这种情况,并且不需要对代码进行任何更改。