.htaccess在我不想要的时候重写我的网址!

时间:2011-03-07 22:36:15

标签: .htaccess mod-rewrite

我正试图让.htaccess为我的网站重写网址。例如:

/Lessons/PhrasalVerbs/PVList/bringup

变为

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

这似乎是一个相对普遍的愿望,所以在环顾互联网之后,我想出了这个问题(仔细阅读):

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]

现在地址栏看起来很好,但网站看起来正确,丢失了大部分格式和图片......(不幸的是我无法发布图片或链接到图片......)

此外,如果我再次点击“启动”页面的链接,则该网址来自

/Lessons/PhrasalVerbs/PVList/bringup

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

所以它有点重复。

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

1 个答案:

答案 0 :(得分:1)

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

问题是您在文档中使用了相对URL。客户端使用基本URL解析相对URL,否则未指定文档的URL。

因此,如果文档的网址路径为/foo/bar,并且其中包含相对网址baz/quux的链接,则客户端会将其解析为/foo/baz/quux,因为baz/quux已解决相对于/foo/bar而不是/

您可以使用绝对路径来修复此问题,即/baz/quux而不是baz/quux。或者使用BASE element显式更改基URI。但我不这样做,因为它影响所有相对URL而不仅仅是相对URL路径。