我正试图让.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的一个相当普遍的用法,我希望有人可以指出我的愚蠢错误!
答案 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路径。