我有一台Apache服务器,为我的公司托管了许多网站。我计划使用htaccess,并将“root”目录中的URL重写为子文件夹。
这是我真正的文件夹结构:
=============================================== =====================
beamstyle网站使用以下代码:
ReWriteCond %{HTTP_HOST} ^(www.)?beamstyle.com.hk [NC]
RewriteCond %{REQUEST_URI} !^/beamstyle/.*$
RewriteRule ^(.*)$ /beamstyle/$1 [L]
以上是有效的,因为我的框架(CodeIgniter)位于/ www / beamstyle内。
因此,我可以访问http://beamstyle.com.hk,它会被重定向而不会出现任何问题。
=============================================== =====================
然而,这是问题所在。当我做beamcard网站时,它不起作用,因为实际上,目录“/ www / beamcard /”实际上只存储静态.html文件。我的CodeIgniter框架在app /.
中当我使用相同的代码时:
ReWriteCond %{HTTP_HOST} ^(www.)?beamcard.com.hk [NC]
RewriteCond %{REQUEST_URI} !^/beamcard/.*$
RewriteRule ^(.*)$ /beamcard/$1 [L]
以下是使用上述代码的结果:
(a)http://beamcard.com.hk/< - 确定没问题,因为这是重写后的直接文件夹(仅包含静态文件)
(b)http://beamcard.com.hk/app< - 不行,因为它在重写后会将一个目录放在直接文件夹之外。
=============================================== =====================
我已尽力而为,并进行了如此多的Google搜索,但未能在重写后对目录下的子目录工作的htaccess代码段进行细化。当我进一步进入子目录时,它就失去了它的“伪装”功能。
非常感谢任何帮助!
干杯, 托马斯
=============================================== =====================
更新1
为了更好地描述我的情况,我整理了一些用例。
[案例情景]
**为简化起见,我们假设“app”目录为空**
(1)如果我输入http://beamcard.com.hk,服务器内的页面“/www/beamcard/index.html”应该被加载。完成加载页面后,位置栏应写入“http://beamcard.com.hk/”。
(2)如果我输入http://beamcard.com.hk/contact_us.html,服务器内的页面“/www/beamcard/contact_us.html”应该被加载。完成加载页面后,位置栏应写入“http://beamcard.com.hk/contact_us.html”。
(3)如果我输入http://beamcard.com.hk/app,则应加载“空文件列表”。完成加载页面后,位置栏应写入“http://beamcard.com.hk/app/”。
(4)如果我输入http://beamcard.com.hk/app/,则应加载“空文件列表”。完成加载页面后,位置栏应写入“http://beamcard.com.hk/app/”。
=============================================== =========================
目前,(1)和(2)有效。
但是,对于(3)和(4),在完成加载页面后,位置栏被重定向到“http://beamcard.com.hk/beamcard/app/”,“显示”“/ beamcard /”部分,理想情况下应该是隐藏在网站访问者之外。
答案 0 :(得分:0)
尝试在最后添加NS
(以防止将规则应用于子请求):
ReWriteCond %{HTTP_HOST} ^(www.)?beamcard.com.hk [NC]
RewriteCond %{REQUEST_URI} !^/beamcard/.*$
RewriteRule ^(.*)$ /beamcard/$1 [L,NS]