如何在不改变相对路径的情况下使用apache的mod_rewrite rewriterule

时间:2008-09-27 22:41:49

标签: apache mod-rewrite

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

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

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

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

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

显然,我想向用户提供“www.example.com/groups/groupname”的网址,因此我不想使用[R] /重定向。

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

相对链接由浏览器而不是服务器解析,因此mod_rewrite无法解决问题。

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

答案 2 :(得分:2)

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

echo '<base href="http://'.$_SERVER['SERVER_NAME'].str_replace("index.php","",$_SERVER['PHP_SELF']).'" />';

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

Hop的回答是正确的。浏览器将 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.php 视为网址。

那就是说,你的问题似乎是你故意使用相关链接......你有理由不使用绝对链接吗?

相关问题