0

我有一个 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/”部分,理想情况下应该对网站访问者隐藏。

4

1 回答 1

0

尝试NS在末尾添加(以防止将规则应用于子请求):

ReWriteCond %{HTTP_HOST} ^(www.)?beamcard.com.hk [NC]
RewriteCond %{REQUEST_URI} !^/beamcard/.*$
RewriteRule ^(.*)$ /beamcard/$1 [L,NS]
于 2013-04-27T06:40:41.810 回答