【问题标题】:mod_rewrite changes the current dirmod_rewrite 更改当前目录
【发布时间】:2011-02-21 11:54:12
【问题描述】:

我有一个 php 文件,它根据给定的变量从数据库加载一篇文章。该站点的根目录中还有一个 .htacces 文件。我在 htaccess 中使用它来重定向

重写规则 ^articles/([a-zA-Z0-9-_\s]+).html$ 模板/index.php?action=viewarticle&alias=$1

重定向后页面显示正常但页面中的html出错,例如:

media/2011/02/21/logos.jpg 转为articles/media/2011/02/21/logos.jpg

这是因为 htacces 正在重定向。无论如何在保持根目录不变的情况下进行此重定向?

【问题讨论】:

  • 尝试像 RewriteBase / 一样添加

标签: php apache .htaccess mod-rewrite


【解决方案1】:

这是因为 htacces 正在重定向。

不,这是因为浏览器认为

example.com/articles/my_article.html

/articles 子目录中的资源,并将所有相对 URL 视为相对于/articles

没有办法改变这种行为。

您将需要开始使用绝对图像引用,或考虑附加目录的相对图像引用:

<img src="/media/2011/02/21/logos.jpg">      <------ recommended
<img src="../media/2011/02/21/logos.jpg">

您也可以按照@Boris 的建议使用&lt;base&gt;,但在我看来,绝对路径(或完整的 URL)是解决问题的一个非常干净的解决方案。

【讨论】:

  • 你是对的。但我不想更改 html(无论如何我都无法更改它,因为它是从我无法编辑的数据库加载的)我所做的事情是使用 str_replace 将所有“media/”替换为“..在页面中显示它之前的 html 并且它工作得很好。谢谢大家的回答。
【解决方案2】:

首先,“页面中的html出错”是什么意思:

  • 是状态栏中显示的链接吗?
  • 它是实际的href吗?如果是,您可能会使用一些视图助手来构建您的“基本网址”
  • 也许您“链接”您的资源而不指定绝对路径(使用 /),然后您的资源“相对”链接到当前页面 (/articles/)

.htaccess 不会更改您代码中的任何内容。

有一个 html 元素允许您定义页面中任何地方使用的基本 url。

<base href="/root" />

如果您有例如&lt;a href="/articles/12"&gt;Article 12&lt;/a&gt;,那么当您点击链接时,您将重定向到 /root/articles/12

【讨论】:

  • 不值得一票否决,这是一个完全可行的答案(尽管我个人不喜欢 base 复仇)
  • 奇怪地毫无理由地拒绝投票,但我需要同意你 Pekka,我也不推荐 ,而是使用绝对 URI,但在某些情况下(使用 ModX CMS)我必须使用它,但需要小心使用。
【解决方案3】:

此外,将 Pekka 的答案与 Boris 的答案混合在一起,您应该在应用程序的某个位置定义应用程序的根路径,并将所有路径输出为绝对路径,并将您之前定义的基本目录放在前面。

例如:在 config.inc.php 中

define("ROOT_URI", "http://myserver.com/myapp");

无处不在:

<img src="<?php echo ROOT_URI;?>/media/2011/02/21/logos.jpg

这就像按照 Boris 的建议使用 base 元素,而不使用它(我也不喜欢 base),并使您的应用程序能够在它存储的网络服务器下的任何文件夹中工作。

【讨论】:

  • 您自己使用这种方法吗?愿意在此处发布链接吗?
  • 是的,我一直在使用它。链接到什么?我认为这背后的原因在我的回答中很清楚。
  • 使用这种方法的网站的链接。您知道,很少有网站使用完整的 URL 作为本地链接。所以,我只是好奇。
  • 啊好的。好吧,我不使用本地链接的完整 URL,但我认为如果我这样放在这里会更清楚。我实际上跳过了myserver.com 部分。你可以在pue.es/continua 看到这个(你会看到一些带有 http 部分的链接,但那是因为相同的代码生成网页和发送给订阅者的时事通讯)。
  • 我一直使用同样的东西。到底为什么有人要对此投反对票?
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2014-12-02
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多