Apache重写URL创建链接问题


Apache Rewrite URL Creating Linking Issues

问题:重写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>