Apache重写URL创建链接问题

时间:2013-05-04 21:08:39

标签: php apache url-rewriting

问题:重写网址会导致某些链接中断。

.htaccess具有以下规则:

RewriteRule ^ blog /([0-9] +)/ [ - 0-9a-zA-Z] + $ index.php?action = blog& postID = $ 1 \%23disqus_thread [NC]

标题模板中的样式表参考:

<link rel="stylesheet" type="text/css" href="style.css" />

我可以点击:

domain.com/blog/1/title-of-article并准确到达文件,但样式表链接中断

如果我直接去:

domain.com/index.php?action=blog&postID=1#.UYV1mcqRiSo然后样式表加载(忽略#.UYV1mcqRiSo,即Disqus的代码)

这也打破了我的徽标链接,即:

<a href="./">

不是将我带到domain.com,而是转到domain.com/blog/1 /

我的基本文件结构是:

index.php和style.css在root中,它会在/ templates文件夹中加载viewPost.php。

发生什么事,我该如何纠正?

2 个答案:

答案 0 :(得分:4)

<强> 1。关于样式表链接

您必须在重写规则之前在.htaccess中包含这些条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

第一个意味着只有当请求的URL对现有文件时,重写规则才有效,而第二个对现有目录执行相同的操作。如果没有这些条件,style.css的请求也会传递到您的index.php文件,而不会直接传递到style.css文件。

如果您已经拥有这些规则且仍然无效,则问题出在URL路径上,请参阅下文。

<强> 2。关于网址路径

您在<a href="./"><link>标记中的链接中使用了相对网址。在这种情况下,它们被解析为URL的当前目录(将它重写到同一文件服务器端并不重要,路径在客户端准备,并且用斜杠/分隔的每个部分都被处理作为目录。因此,如果当前URL为 domain.com/blog/1 / ,则./将解析为 domain.com/blog/1 / 。 )style.css的路径可以解析为 domain.com/blog/1/style.css 。如果您希望这些链接的工作方式就好像它们直接位于网址中的域名之后,则必须使用绝对网址,即/,而不使用徽标上的链接点; /style.css用于样式表链接。

答案 1 :(得分:2)

最简单的解决方案:只需设置相对于域根的链接,方法是使用斜杠(相应地删除指向链接中当前文件夹的点):

<link rel="stylesheet" type="text/css" href="/style.css" />
<a href="/">Logo</a>