好吧,所以我已经为我正在设置的服务器下载了一个CMS,我对这些文件的路径有些困难。
我已将CMS放在我服务器上的子目录中,因为根目录已被另一个CMS使用。但是,CMS在代码中重复使用“/”链接到其文件。例如,使用以下代码找到图像:
<img src="/images/banner.png" />
如您所知,这不起作用,因为上面的链接会将请求重定向到服务器根目录中的images文件夹,而不是子目录。 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”时返回以下错误页面: 找不到
在此服务器上找不到请求的网址/private_servers/strebbohotel/.php。
此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。
如您所见,它出于某种原因跳过了“content”子目录。我相信它与.htaccess文件的其他行有关,但我无法弄清楚哪些。也可能是我需要一个更复杂的正则表达式,但我并不是特别擅长,所以如果有人能帮助我,我会感激不尽。
答案 0 :(得分:1)
CMS子目录中的.htaccess文件对对服务器根目录发出的请求没有影响。你需要在那里添加.htaccess。
即使这样,我也不知道如何将来自CMS的请求(例如示例中的图像请求)与用于Web根目录的应用程序区分开来。
您的CMS是否没有任何配置设置允许您指定除Web根目录以外的文件的路径?
答案 1 :(得分:1)
您必须更改根目录上的.htaccess文件 - 这会弄乱其他CMS。我想到的唯一解决方案是使用RewriteCond的组合:
RewriteCond %{HTTP_REFERER} my_better_cms_url_regex
RewriteCond %{REQUEST_URI} ^/images/.*$
RewriteRule ^.*$ /subdirectory/%{REQUEST_URI}
这应该可以解决问题。如果要自定义它,请参阅this cheatsheet(或simmilar)。但请注意,根目录中的.htaccess将根据对您的子目录cms发出的所有请求进行检查 - 因此需要第二个条件。
答案 2 :(得分:1)
您想使用:
RewriteBase /another_root_dir/
在.htaccess文件的开头