mod_rewrite更改当前目录

时间:2011-02-21 11:54:12

标签: php apache .htaccess mod-rewrite

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

  

重写规则   ^文章/([A-ZA-Z0-9 -_ \ S] +)。HTML $   ?模板/ index.php的动作= viewarticle&安培;别名= $ 1

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

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

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

3 个答案:

答案 0 :(得分:5)

  

这会发生,因为htacces正在重定向。

不,这是因为浏览器认为

example.com/articles/my_article.html

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

无法改变这种行为。

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

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

你也可以按照@Boris的建议使用<base>,但在我看来,绝对路径(或完整的URL)是解决问题的一个非常清晰的解决方案。

答案 1 :(得分:1)

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

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

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

有一个html元素,可让您定义页面中随处可用的基本网址。

<base href="/root" />

如果你有例如<a href="/articles/12">Article 12</a>,那么当点击链接时,你将重定向到/ root / articles / 12

答案 2 :(得分:0)

另外,将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),并使您的应用程序能够在它存储的Web服务器下的任何文件夹中工作。 / p>