我正在尝试从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文件,对吧?
我到底错过了什么?
答案 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
条指令都相同。