Php 重定向目录(.htaccess)

Php 重定向目录(.htaccess),php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,情况是这样的。我有这样的目录结构: 根 ----管理员 ------------index.php ----index.php ----图像 ----样式表 ----javascripts 问题 页面的所有内容都由index.php文件生成,该文件根据数据库中给定的$\u GET变量加载内容。我在管理文件夹的index.php中有tinymce。因此,当页面内容以tinymce显示时,图像和样式表等看起来会被破坏,因为它们试图获得类似于images/image1.jpg 我想要什么 我想制作一个

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

----管理员
------------index.php
----index.php
----图像
----样式表
----javascripts
问题
页面的所有内容都由index.php文件生成,该文件根据数据库中给定的
$\u GET
变量加载内容。我在管理文件夹的index.php中有tinymce。因此,当页面内容以tinymce显示时,图像和样式表等看起来会被破坏,因为它们试图获得类似于
images/image1.jpg

我想要什么

我想制作一个.htaccess文件来解决这个问题(如果可能的话)。我想说的是,每当从<强>管理文件夹< /强>(其中.HTAccess文件将被请求)如“代码> /图像< /代码>时,应将其视为代码>…/图像< /代码>。因为我不知道如何编写.htaccess文件,所以我寻求帮助

从您的评论来看,您拥有的似乎是相对URL,如
images/image1.jpg
,浏览器将相对于当前目录而不是域的根目录加载这些URL。一般来说,我建议您尽可能避免创建此类链接,方法是添加一个前导的
/
,但我知道,如果您有大量现有内容,转换可能并不容易

因此要明确的是,当HTML显示在
/admin/index.php
上时,
images/image1.jpg
的图像源将导致对
/admin/images/image1.jpg
的GET请求。因此,最简单的(显然是毫无用处的)规则是:

 RewriteRule admin/images/image1.jpg /images/image1.jpg
意思是“当你看到这个URL时,实际上是为这个URL服务”。请注意,具有讽刺意味的是,左侧没有前导字符
/
;这是因为在
.htaccess
中,重写规则是相对于当前目录处理的;在“real”配置文件(Apache启动时包含)中,规则将有一个前导的
/

很明显,您想要推广,所以您需要一个非常简单的正则表达式来表示“当您看到这样一个URL时,实际上提供这样一个等效的URL”:

其中,
(.*)
表示匹配任何长度的内容,并“捕获”该内容,
$1
表示在捕获的第一项内容中进行替换


另一个要考虑的是,是否希望两个URL都具有相同的内容(内部重写,这是上面所做的),或者浏览器是否应该被告知加载“正确”的URL(重定向),这可以通过在代码的末尾添加<代码> [R= TAMP] < /C>或<代码> [R=永久] < /代码>。一个优点是,浏览器将看到URL相同,并且能够提供相同的缓存副本。

如果您的Web服务器运行在*nix系统上,您应该能够在管理目录中使用符号链接

ln -s ../images images
您可能必须允许Web服务器(假设apache)遵循符号链接(可以在.htaccess文件中设置)

您可能还想签出:

您说“无论何时从管理员文件夹……收到请求”;web请求不是“来自”任何文件夹,它只是从浏览器向服务器请求特定URL。如果该URL是
/images/image1.jpg
,则这是您在重写规则中可以看到的唯一URL。(请求中可能有一个“referer”头,但它不是100%可靠的,基于它的体系结构可能会导致比它解决的问题更多的问题。)哦,是的,我的意思是……但是你所说的“来自”是什么意思?再读一遍,URL
/images/image1.jpg
似乎是正确的。你的意思是你的HTML包含像
images/image1.jpg
(没有前导的
/
,相对于当前目录,而不是域的根目录),所以浏览器试图查找
/admin/images/image1.jpg
?请耐心点,否则我会删除我写了一半的解释。如果你想对某人指手画脚,就付钱给他们。如果你想得到志愿者的帮助,请谦虚一点。谢谢你的回答,但是把这个放在项目的根本上是行不通的<代码>在RewriteRule/admin/images/(.*)/images/$1上重写引擎Ah,我太习惯在“real”配置文件中使用mod_rewrite(包括在Apache启动时)。我认为在使用.htaccess时,必须省略前导/(讽刺的是,在本例中!)。因此它将是
RewriteRule admin/images/(.*)/images/$1
。您是否记得在顶部添加
RewriteEngine?我忘了提到这一点,因为我看到你已经听说过mod_rewrite,所以我直接进入了规则本身。是的,我记得不要担心RewriteRule admin/images/(.*)/images/$1上的
RewriteEngine
ln -s ../images images