1

我正在尝试从 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 文件,对吗?

我到底在这里想念什么?

4

1 回答 1

3

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

现在有效的结果.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指令是相同的。

于 2013-02-07T18:41:18.357 回答