【问题标题】:Apache Rewrite URL Creating Linking IssuesApache 重写 URL 创建链接问题
【发布时间】:2013-05-04 21:08:38
【问题描述】:

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

.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。

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

【问题讨论】:

    标签: php apache url-rewriting


    【解决方案1】:

    1.关于样式表链接

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

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

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

    如果您已经有了这些规则,但它仍然不起作用,那么问题出在 URL 路径上,请参见下文。

    2。关于 URL 路径

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

    【讨论】:

    • 感谢您的回答。虽然我选择了另一个答案,但我确实从你深思熟虑的答案和解释中学到了东西。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。我选择了你的答案,因为它解决了我的问题。我确实还有一个问题......现在我将路径从“./”更改为“/”链接在我的网站上工作正常,但是在 localhost(在我的盒子上)上它现在全部关闭。你有什么建议?
    • 嗯,这可能是因为在您的本地主机上,您的根文件夹中没有此站点?您可以根据配置变量使用 PHP 动态编写路径 – 或者,我建议您这样做,您可以设置一个单独的 VirtualHost,指向您的项目所在的文件夹和一个假的本地域名(@ Windows 下的 987654322@ 文件),以便在域根目录下直接访问该项目。 (一般来说,设置您的开发环境以尽可能地模仿您的实际环境是一个好主意。)
    • 啊新手错误。关闭了我的 httpd.conf 文件中的路径。肯定会得到匹配的开发和生产盒。感谢大家的帮助!
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多