我有一个 Apache 服务器,为我的公司托管了许多网站。我计划使用 htaccess,并将 URL 从“根”目录重写到子文件夹。
这是我真正的文件夹结构:
- /www(根)
- /www/beamstyle(beamstyle.com.hk,CodeIgniter 框架)
- /www/beamcard(beamcard.com.hk,静态文件)
- /www/beamcard/app(beamcard.com.hk/app,CodeIgniter 框架)
==================================================== ===================
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/ <-- OK 没问题,因为这是重写后的直接文件夹(并且只包含静态文件)
(b) http://beamcard.com.hk/app <-- 不好,因为它在重写后跨过直接文件夹的一个目录。
- 如果我输入这个,位置栏(在顶部)会被伪装并重定向到http://beamcard.com.hk/beamcard/app/(我确认这个重定向不是由 Codeigniter 文件完成的,因为同样的结果会发生当我申请一个空目录时)
==================================================== ===================
我已经尝试了所有我能做的事情,并且做了很多谷歌搜索,但未能在重写后对在目录之外的子目录上工作的 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/”部分,理想情况下应该对网站访问者隐藏。