重定向目录(.htaccess)

时间:2014-06-28 19:10:25

标签: php apache .htaccess mod-rewrite

以下是这种情况。我有这样的目录结构:

----管理
------------的index.php
---- index.php文件
----图片
----样式表
---- JavaScript的
问题
页面的所有内容都是由index.php文件生成的,该文件根据数据库中给定的$_GET变量加载内容。我在管理文件夹的index.php中有一些内容。因此,当页面的内容显示为tinymce时,图像和样式表等看起来很糟糕,因为他们试图获得类似images/image1.jpg的内容。
我想要什么
我想创建一个.htaccess文件来解决这个问题(如果可能的话)。我想说的是,只要来自管理员文件夹(其中.htaccess文件将来)/images这样的请求,就应该将其视为../images。因为我不知道如何写.htaccess文件,这就是我寻求帮助的原因。

2 个答案:

答案 0 :(得分:0)

根据您的评论,您所拥有的是相对URL,例如images/image1.jpg,浏览器将相对于当前目录加载,而不是域的根。一般情况下,我建议您尽可能避免通过添加前导/来创建此类链接,但我们感谢如果您有大量现有内容,则转换可能并不容易。

所以要明确的是,当/admin/index.php上显示HTML时,images/image1.jpg的图片来源会导致/admin/images/image1.jpg的GET请求。因此,最简单(显然相当无用)的规则是:

 RewriteRule admin/images/image1.jpg /images/image1.jpg

含义“当您看到此网址时,实际上会提供此网址”。请注意 - 有点讽刺的是 - 左侧没有前导/;这是因为在.htaccess内,相对于当前目录处理重写规则;在“真正的”配置文件中(在Apache启动时包含),该规则将具有前导/

显然,你想要概括,所以你需要一个非常简单的正则表达式来说“当你看到这样的URL时,实际上就像这样提供等效的URL”:

 RewriteRule admin/images/(.*) /images/$1

(.*)表示匹配任何长度的任何内容,并“捕获”它,$1表示在捕获的第一个内容中替换。

还需要考虑的另一件事是,您是否希望两个URL只具有相同的内容(内部重写,这是上面将要做的)或者是否应该告诉浏览器加载“正确”的URL(a重定向),您可以通过在规则末尾添加[R=temp][R=permanent]来实现。一个优点是浏览器将看到URL相同,并且能够提供相同的缓存副本。

答案 1 :(得分:0)

如果您的网络服务器在* nix系统上运行,您应该可以在管理目录中使用符号链接。

ln -s ../images images

您可能必须允许网络服务器(假设为apache)遵循符号链接(可以在.htaccess中设置)。

您可能还想查看: .htaccess config with symbolic links and index files not working as expected