【问题标题】:How to write htaccess rewrite for subdirectories recursively?如何递归地为子目录编写 htaccess 重写?
【发布时间】:2013-04-27 05:24:28
【问题描述】:

我有一个 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/

(b) http://beamcard.com.hk/app

  • 如果我输入这个,位置栏(在顶部)会被隐藏并重定向到http://beamcard.com.hk/beamcard/app/(我确认这个重定向不是由 Codeigniter 文件完成的,因为当我在空目录上应用时会发生相同的结果)

================================================ ======================

我已经尽我所能,做了很多谷歌搜索,但未能在重写后对目录之外的子目录工作的 htaccess sn-p 进行罚款。当我在子目录中更进一步时,它会失去它的“伪装”功能。

非常感谢您对此的任何帮助!

干杯, 托马斯

================================================ ======================

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

【问题讨论】:

  • 有人对此有任何想法吗?我很困,已经2天了。希望有人可以在这里帮助我...

标签: .htaccess mod-rewrite url-rewriting rewrite subdirectory


【解决方案1】:

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

ReWriteCond %{HTTP_HOST} ^(www.)?beamcard.com.hk [NC]
RewriteCond %{REQUEST_URI} !^/beamcard/.*$
RewriteRule ^(.*)$ /beamcard/$1 [L,NS]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2012-05-06
    • 1970-01-01
    • 2019-05-28
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多