所以我使用了一个简单的重写规则,比如:
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 中文件的路径的情况下让事情变得正确?
所以我使用了一个简单的重写规则,比如:
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,或更新所有相对 URL 以指向您的站点根目录(例如,不要使用relative/path/url.jpg
but /relative/path/url.jpg
)。
在您的代码中,您应该为您的资源(图像、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个简单的方法
删除仍在使用 htaccess 的引用对象的 foo 路径
重写规则 ^foo(/.*.(jpg|html|gif|css))$ $1 [L]
我更喜欢第二种解决方案,因为 htaccess 搞砸了,而 htaccess 解决了这种情况,并且不需要更改您的代码。