0

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

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

4

3 回答 3

1

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

于 2012-06-16T16:42:56.047 回答
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"
于 2012-06-16T22:26:54.253 回答
0

2个简单的方法

  1. 按照 Ianzz 的建议绝对化引用
  2. 删除仍在使用 htaccess 的引用对象的 foo 路径

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

我更喜欢第二种解决方案,因为 htaccess 搞砸了,而 htaccess 解决了这种情况,并且不需要更改您的代码。

于 2012-06-16T23:00:07.663 回答