【问题标题】:Exclude a root folder from CakePHP app从 CakePHP 应用程序中排除根文件夹
【发布时间】:2013-01-22 23:01:00
【问题描述】:

我正在尝试从 Cake(根文件夹应用程序)中排除第一级目录,因为它应该包含不同的应用程序。

/ 持有应用程序

/development/ 保存应用的测试版本

目录结构:

公共文件夹

.htaccess [modified]
app
    .htaccess [unmodified]
    webroot
        .htaccess [unmodified]
        index.php [unmodified]
        ...
    ...
lib
    Cake
    ...
development
    app
        webroot
            index.php [dumps $_SERVER for test purposes]

所以,我的开发结构内部仍然没有应用程序(也没有 .htaccesses),只是为了测试我的根 .htaccess 是否有效。

这是我对根 .htaccess 的修改:

<IfModule mod_rewrite.c>
   RewriteEngine on

   RewriteCond %{REQUEST_URI} ^/development.*
   RewriteRule (.*) - [L]

   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

会发生什么:

/development/ 显示开发文件夹的 apache 索引

/development/app/显示app文件夹的apache索引

/development/app/webroot 显示根应用程序(尽管开发 url 匹配,仍会捕获请求)。

/development/app/webroot 应该显示我的 /development/app/webroot/index.php 文件,对吗?

我到底错过了什么?

【问题讨论】:

  • 创建一个虚拟主机(可能具有不同的端口)来托管您的开发站点不是更容易吗?这个虚拟主机将指向 /development/app/webroot.. 或者可能是一个子域
  • 通常,是的。但我需要使用第三方 SOAP 服务进行测试,该服务使用安装在主服务器上的 SSL 证书,这就是为什么我需要将它放在子目录中的原因。这也是解决一个常见问题的问题。恕我直言,任何平台都应该能够轻松地与站点上的其他系统共存,而不是占用根空间。

标签: .htaccess cakephp


【解决方案1】:

这原来是我服务器上的一个奇怪的错误。

现在有效的.htaccess 是:

<IfModule mod_rewrite.c>
   RewriteEngine on

   RewriteCond %{REQUEST_URI} !^/development(?:$|/)
   RewriteRule    ^$ app/webroot/    [L]

   RewriteCond %{REQUEST_URI} !^/development(?:$|/)
   RewriteRule    (.*) app/webroot/$1 [L]

</IfModule>

由于我不知道的原因,如果我通过 SSH 连接到我的用户帐户并通过命令行编辑 .htaccess 文件,它将无法正常工作!

当我上传相同的文件(通过 SFTP)时,它开始正常工作。

我在 CentOS (5.9) 上使用 cPanel (11.34.1)。

另一个例子:如果你希望在一个 CakePHP 安装中“忽略”多个子文件夹,你可以使用这个模式:

<IfModule mod_rewrite.c>
   RewriteEngine on

   # /development, /version1.5 and /version1.8 directories
   # they all hold independent apps
   # or completely non-cake-related content

   RewriteCond %{REQUEST_URI} !^/(?:development|version1\.5|version1\.8)(?:$|/)
   RewriteRule    ^$ app/webroot/    [L]

   RewriteCond %{REQUEST_URI} !^/(?:development|version1\.5|version1\.8)(?:$|/.*)
   RewriteRule    (.*) app/webroot/$1 [L]

</IfModule>

请注意,两个RewriteCond 指令是相同的。

【讨论】:

  • \.在模式中用于捕获实际的点。如果没有 \,点表示任何字符
  • 把这个sn-p放到Gist,这样你以后可以收藏它。 ;)
猜你喜欢
  • 2020-05-28
  • 1970-01-01
  • 2013-10-09
  • 2013-06-20
  • 2011-03-18
  • 2021-12-26
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多