2

问题:重写 url 导致一些链接中断。

.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 在根目录下,它会在 /templates 文件夹中加载 viewPost.php。

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

4

2 回答 2

4

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对于样式表链接。

于 2013-05-04T21:23:00.190 回答
2

最简单的解决方案:只需将链接设置为相对于域根目录,方法是在它们前面加上一个斜杠(分别删除指向链接中当前文件夹的点):

<link rel="stylesheet" type="text/css" href="/style.css" />
<a href="/">Logo</a>
于 2013-05-04T21:22:41.103 回答