如何在不更改相对路径的情况下使用apache的mod_rewrite重写器

时间:2020-03-06 14:50:00  来源:igfitidea点击:

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

RewriteRule ^groups/([^/\.]+)/?$  groupdetail.php?gname= [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。

显然,我想向用户发送URL使其看起来像" www.example.com/groups/groupname",所以我不想使用[R] /重定向。

解决方案

如果我们更改重审规则以执行强制重定向(添加[R]选项),则浏览器将使用/groupdetail.php URL,并且相对链接将正常工作。但是,这增加了一个重定向,并使URL不太美观。

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

相对链接是由浏览器而不是服务器解析的,因此使用mod_rewrite不能执行任何操作。

使用相对链接向上层次结构(../ link.php)或者使用绝对链接。

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

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

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

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

&lt;a href=/link.php>

然后,用户将看到" www.example.com/link.php"作为网址。

就是说,从问题看来,我们是故意使用相对链接...我们是否有理由不使用绝对链接?

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

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