2011-03-07 41 views
0

我试图让.htaccess重写我的网站的网址。例如:.htaccess在我不想要的时候重写我的网址!

/Lessons/PhrasalVerbs/PVList/bringup 

成为

/index.php?page=Lessons/PhrasalVerbs/PVList/bringup 

这似乎是一个比较普遍的愿望,于是四处寻找互联网后,我想出了(读bemusedly复制)这一点:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ http://www.example.com/index.php?page=$1 [L,QSA] 

现在原样,工作的事情,但它是第二,不是第一个网址,出现在酒吧。现在,如果我的最后一行改变从

RewriteRule ^(.*)$ http://www.example.com/index.php?page=$1 [L,QSA] 

RewriteRule ^(.*)$ /index.php?page=$1 [L,QSA] 

现在的地址栏看起来不错,但该网站从寻找正确失去其大部分的格式和图像的...(unfortuntely去我不能发布图片或图片链接...)

另外,如果我点击,例如,链接到“弹出”页面再次,该URL从

/Lessons/PhrasalVerbs/PVList/bringup 

/Lessons/PhrasalVerbs/PVList/Lessons/PhrasalVerbs/PVList/bringup 

所以这有点重演。

这可能正是清楚,我在mod_rewrite的完全没用,我非常困惑。由于这似乎是.htaccess的一个相当普遍的用法,我希望有人能指出我愚蠢的错误!

回答

1

这是一个非常常见的错误做URL重写时,它有无关的mod_rewrite。

的问题是,你使用相对URL在文档中。客户端使用基本URL来解析相对URL,即该文档的URL未另行指定。

因此,如果文档的URL路径是/foo/bar并且在它与相对URL baz/quux的链接,客户端解析到/foo/baz/quuxbaz/quux解决相对于/foo/bar而不是/

可以通过使用绝对路径而不是解决这个问题,即/baz/quux代替baz/quux。或者通过使用BASE element明确更改基本URI。但我不会这样做,因为它影响所有相对URL,而不仅仅是相对URL路径。

+0

嘿谢谢!这有助于大幅度清理事情。我继续使用基本元素,它工作。我不完全明白你的意思是“但我不会那样做,因为它会影响所有相对URL而不仅仅是相对URL路径。”但知道编程,它可能会回来咬我在后面。现在该网站运作。再次感谢! – 2011-03-08 13:24:31

+0

@迈克尔贝珊:我的意思是,新的基本URL也适用于像'foo'(仅查询)或'#foo'(仅片段)的网址? – Gumbo 2011-03-08 14:32:47