4

我在 .htaccess 中有以下重写规则:

RewriteRule ^groups/([^/\.]+)/?$  groupdetail.php?gname=$1 [L,NC]

这需要类似 www.example.com/groups/groupname 并调用 www.example/groupdetail.php?gname=groupname。它工作得很好。

但是 groupdetail.php 上的所有相对链接都使用 groups/ 作为相对路径,我不希望它们这样做。我该如何避免这种情况?

例如,当用户单击<a href="link.php">groupdetail.php?gname=groupname 上的链接时,他会被带到 www.example/groups/link.php。我想把用户带到 www.example.com/link.php。

显然,我希望用户的 URL 看起来像“www.example.com/groups/groupname”,所以我不想使用 [R]/redirect。

4

6 回答 6

5

如果像我一样,您在页面中有数百个相对链接,请在<base href="">绝对<head>路径中插入一个(也可以使用相对路径)。您还需要在<head>绝对路径中创建 .js 文件的路径,因为 IE 和 firefox 以不同的方式处理基本 href。我同意这是一个烦人的问题。

于 2008-10-15T22:24:56.643 回答
3

相对链接是由浏览器解析的,而不是服务器,所以你不能用 mod_rewrite 做任何事情。

要么使用相对链接向上层级(../link.php)或使用绝对链接。

于 2008-10-01T01:18:20.093 回答
2

如果您不想使用绝对链接或<base>因为要移动页面而使用,您可以使用 php 生成基础,如下所示:

echo '<base href="http://'.$_SERVER['SERVER_NAME'].str_replace("index.php","",$_SERVER['PHP_SELF']).'" />';
于 2011-12-01T04:49:33.850 回答
1

如果您更改重写规则以执行强制重定向(添加 [R] 选项),则浏览器将使用 /groupdetail.php URL,并且相关链接将正常工作。但是,这会增加一个重定向并使 URL 不那么漂亮。

RewriteRule ^groups/([^/.]+)/?$ groupdetail.php?gname=$1 [L,NC,R]
于 2008-09-27T22:59:28.160 回答
1

如果您不想使用绝对路径,可以使用 BASE 标记:

http://www.w3schools.com/tags/tag_base.asp

于 2009-12-30T14:40:17.390 回答
0

霍普的回答是正确的。浏览器将www.example.com/groups/groupname其视为地址,因此认为这/groups是当前目录。因此,任何类似的链接<a href=link.php>都假定在/groups文件夹中。

当用户将鼠标移到链接上时,他会看到www.example.com/groups/link.php链接地址。

解决方案是使用绝对链接——只需在 href 前添加一个斜杠:

<a href=/link.php>

然后,用户将看到www.example.com/link.phpurl。

也就是说,从您的问题看来,您是故意使用相对链接......您有理由不使用绝对链接吗?

于 2009-03-04T05:49:54.687 回答