我希望答案会变得如此简单,我会想哭,但我似乎无法弄明白。我是mod_rewrite的新手。
我想将我的链接从domain.com/?p=about更改为domain.com/about*/*(带斜杠)并且工作正常,但每当我转到链接,它会将新链接附加到网址的后面。例如,我有一个关于和一个联系链接。如果我点击它导航到domain.com/about/然后如果我点击联系人,它会导航到domain.com/about/contact/并继续添加链接到网址的末尾。如果我在domain.com并点击一个链接(在这种情况下),它将转到domain.com/about/,如果我再点击4次,我的地址栏会说“domain.com/关于/ about / about / about / about /“我在下面的一个非常简单的例子中复制了这个,我做错了什么?
的.htaccess
RewriteEngine On
RewriteRule ([a-zA-Z0-9]+)/$ index.php?p=$1
的index.php
<a href="about/">about</a> | <a href="contact/">contact</a><br><br>
<?php
if(!isset($_GET['p'])) {
echo "home";
} else {
echo $_GET['p'];
}
?>
感谢您的帮助!
编辑: 如果我使用绝对路径,它可以正常工作,但如果我不是绝对必须的话,我宁愿不这样做。
edit2:添加
RewriteBase /
打破链接。他们似乎要访问domain.com/about/和... / contact /,但我得到了404 - 我假设我使用的规则与我正在进行链接的方式不相符,这就是为什么我也包括了index.php。
答案 0 :(得分:1)
您正在定义HTML中与当前路径相关的所有链接。
您需要更改链接,以便:
<a href="about/">about</a> | <a href="contact/">contact</a><br><br>
成为(注意网址上的前导/后缀):
<a href="/about/">about</a> | <a href="/contact/">contact</a><br><br>
当您在页面site.com/about/us
上时,浏览器会将<a href="home/"
之类的链接解析为site.com/about/us/home
。
解决方案是更改所有链接,图片,样式表和javascripts,以使用网址中的绝对路径,而不是像现在这样的相对路径。
编辑:刚注意到你的编辑。你真的应该使用绝对路径,而不是相对路径。如果您想保留相对网址,则必须在所有网页上使用<base href="/" />
之类的内容。
答案 1 :(得分:1)
无论您做什么,点击<a href="about/">about</a>
都会将about/
附加到网址的末尾。这就是相对链接的工作方式。
你的选择是按照明智的顺序:
只需删除该斜杠即可。这就是问题的原因:
<a href="about">about</a>
相对链接将使用您的新值替换路径的最后一部分(在最后一个/
之后)。
添加前一个../
。这有点hacky,但它可以让你保留那个有价值的尾随斜杠
<a href="../about/">about</a>
执行从/about/about
到/about
的301重定向。这会导致地址栏从/about
更改为/about/about
并再次返回。
答案 2 :(得分:1)
回答可能有点太晚了,但在<base href="/"> or <base href="your-domain-name">
部分添加这一行就可以解决问题了:
*