0

好的,所以我已经为我正在设置的服务器下载了一个 CMS,但我对文件所在的路径有些困难。

我已将 CMS 放在服务器上的子目录中,因为根目录已被另一个 CMS 使用。但是,CMS 在代码中反复使用“/”链接到他们的文件。例如,使用以下代码找到图像:

<img src="/images/banner.png" />

如您所知,这不起作用,因为上面的链接将请求重定向到服务器根目录中的图像文件夹,而不是子目录。CMS 还附带了一个“.htaccess”文件,所以我立即想到可以将所有使用“/”字符发出的请求重定向到服务器上的子目录。这是原始的“.htaccess”文件:

RewriteEngine On

RewriteRule ^index.php(|/)$ content/.php
RewriteRule ^error.php(|/)$ content/error.php
RewriteRule ^housekeeping(|/)$ housekeeping/index.php
RewriteRule ^(|/)$ content/$1.php
RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ content/$1.php
RewriteRule ^rd/([^/]+)(|/)$ /rd.php?id=$1

RewriteRule ^quickregister/start(|/)$ /register/start.php
RewriteRule ^quickregister/step2(|/)$ /register/step2.php
RewriteRule ^quickregister/step3(|/)$ /register/complete.php

RewriteRule ^community/online(|/)$ content/online.php
RewriteRule ^community/vip(|/)$ content/vip.php
RewriteRule ^credits/goldvip(|/)$ content/goldvip.php

RewriteRule ^home/(..*)$ content/home.php?u=$1
RewriteRule ^articles/(..*)$ content/articles.php?story=$1

ErrorDocument 403 /content/error.php
ErrorDocument 404 /content/error.php

我以为通过添加

RewriteRule ^/$ /subdirectory/

对“/”的请求将被重定向,但无济于事。我检查了 apache 配置,似乎启用了使用 htaccess 文件覆盖配置,所以如果有人能够帮助我,我会很高兴。

提前致谢!

编辑: 我真正接近解决方案。我在“RewriteEngine on”下面插入了这段代码:

RewriteRule ^(.*)/(.*)$ /private_servers/strebbohotel/$2

访问网址“http://mysite.com/private_servers/strebbohotel/content/.php”时返回以下错误页面:未找到

在此服务器上未找到请求的 URL /private_servers/strebbohotel/.php。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

如您所见,它出于某种原因跳过了“内容”子目录。我相信它与 .htaccess 文件的其他行有关,但我不知道是哪些。也可能是我需要一个更复杂的正则表达式,但我不是特别擅长它,所以如果有人可以进一步帮助我,我将不胜感激。

4

3 回答 3

1

你想使用:

RewriteBase /another_root_dir/

在 .htaccess 文件的开头

于 2012-08-03T17:02:19.297 回答
1

CMS 子目录中的 .htaccess 文件对针对服务器根目录的请求没有影响。您需要在此处添加一个 .htaccess。

尽管如此,我不知道您将如何区分来自 CMS 的请求(例如您的示例中的图像请求)与那些针对 Web 根目录中的应用程序的请求。

您的 CMS 是否没有任何配置设置允许您指定除 Web 根目录以外的文件的路径?

于 2012-08-03T16:19:25.400 回答
1

您必须更改根目录上的 .htaccess 文件 - 这会与其他 CMS 混淆。我想到的唯一解决方案是使用 RewriteCond 的组合:

RewriteCond %{HTTP_REFERER} my_better_cms_url_regex
RewriteCond %{REQUEST_URI} ^/images/.*$
RewriteRule ^.*$ /subdirectory/%{REQUEST_URI}

这应该够了吧。如果您想自定义它,请参阅备忘单(或类似文件)。但请注意,根目录中的 .htaccess 会根据对您的子目录 cms 发出的所有请求进行检查 - 因此需要第二个条件。

于 2012-08-03T16:22:09.347 回答