[英]Apache Rewrite URL Creating Linking Issues
问题:重写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。
怎么回事,我该如何纠正?
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.