【发布时间】:2015-02-03 19:36:40
【问题描述】:
我有一个复杂的问题,我好几天都无法解决。也许一些对 htaccess 功能有更多了解的专家可以提供帮助。
我在根目录中有两个文件 - test.php 和 files_include.php。
用户通常会看到的 URL 是:
www.example.com/test.php?cs1=A&cs2=B&cs3=C&cs4=D
由于这是一个丑陋的 URL,我想将其重写为更好的形式:
www.example.com/search/A-B-C-D.html
在 .htaccess 中使用这样的规则我可以轻松地重写 URL:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^search/([^-]*)-([^-]*)-([^-]*)-([^-]*)\.html$ /test.php?cs1=$1&cs2=$2&cs3=$3&cs4=$4 [L]
在 test.php 文件中,我调用了这样的网站配置文件:
include('files_include.php');
现在是问题。一旦我将 URL 重写到与根目录不同的位置,我就会遇到一个非常奇怪的问题。该页面仍然在浏览器中正确呈现,但是:
问题 1. 如果我想看到正确的图像,我必须将 src="images 替换为 src="../images。这可以通过提供绝对链接轻松纠正,这是更容易的部分。
但问题是为什么相对路径会发生变化? .htaccess 是否让浏览器认为我们在search'/ 文件夹中?这个问题的答案将帮助我确定主要问题,即问题 2。
问题 2. 一旦 URL 被重写,站点地图生成器就无法跟随页面上的链接,就好像它在他们看来是空白一样,无论在浏览器中一切看起来都很好。
因此,我猜想通过将 URL 重写为 search/A-B-C-D.html 我会破坏包含 files_include.php 的内容。
基本上,在将root/test.php 重写为root/search/A-B-C-D.html 时,我需要一个大致的概念以及我应该记住的事情
有什么建议吗?
【问题讨论】:
-
您可以排除某些目录,例如 /image 并且您的搜索 url 不需要 .html
-
你是什么意思:“一旦 URL 被重写,站点地图生成器就不能跟随页面上的链接”?!如果您在 html 页面中使用链接作为
search/a-b-c-d.html站点地图生成器将使用它!我不明白你的第二个问题。 -
您的站点地图生成器是做什么的?那么你的 files_include.php 中有什么?
标签: php apache .htaccess url mod-rewrite