从CakePHP应用程序中排除根文件夹

时间:2013-02-07 12:33:04

标签: .htaccess cakephp

我正在尝试从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是否有效。

这是我对root .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显示了根应用程序(尽管开发网址匹配,仍会捕获请求)。

/ development / app / webroot应该向我展示我的/development/app/webroot/index.php文件,对吧?

我到底错过了什么?

1 个答案:

答案 0 :(得分: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条指令都相同。