问题:重写url导致某些链接中断。
.htaccess有以下规则:
重写规则^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,则样式表加载fine(忽略#.UYV1 mcqRiso,即Disqus中的代码(。
这也打破了我的标志链接,它是:
<a href="./">
与其带我去domain.com,不如去domain.com/blog/
我的基本文件结构是:
index.php和style.css在根目录中,它在/templates文件夹中加载viewPost.php。
发生了什么,我该如何纠正?
1。关于样式表链接
在重写规则之前,您必须在.htaccess中包含这些条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
第一种方法意味着只有当请求的URL是而不是到现有文件时,重写规则才有效,第二种方法对现有目录也是如此。如果没有这些条件,对style.css
的请求也会传递到您的index.php
文件,而不是直接传递到style.css
文件。
如果你已经有了这些规则,但它仍然不起作用,那么问题就出在URL路径上,请参阅下文。
2.关于URL路径
您在链接中使用的是相对URL,包括<a href="./">
和<link>
标记。在这种情况下,它们被解析为URL的当前目录(它被重写到同一文件服务器端并不重要,路径是在客户端准备的,用斜杠/
分隔的每个部分都被视为一个目录。因此,如果当前URL是domain.com/blog/1/,./
被解析为domain.com/blog/1/。(style.css
的路径可以解析为domain.com/blog/1/style.css。如果你想让这些链接像直接在URL中的域名后面一样工作,你必须使用绝对URL,即徽标上的链接不带点的/
;样式表链接的/style.css
。
最简单的解决方案:只需设置相对于域根的链接,在它们前面加一个斜线(即删除链接中引用当前文件夹的点(:
<link rel="stylesheet" type="text/css" href="/style.css" />
<a href="/">Logo</a>