2011-04-22 51 views
6

我想我的服务器上的public_html文件夹是我的zend项目中的公用文件夹。 你们有什么想法我可以做到这一点?现在我可以查看我的网站domain.com/public在Zend_Framework项目中更改公用文件夹位置?

我试图改变index.php文件到这个(修改的目录)

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . 'application')); 

// Define application environment 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . 'library'), 
    get_include_path(), 
))); 

/** Zend_Application */ 
require_once 'Zend/Application.php'; 

// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 
$application->bootstrap() 
      ->run(); 

但是,这是行不通的。任何想法如何我可以得到这个固定?

基本上我想这样的目录结构:

public_html/ 
----application/ 
----library/ 
----index.php 

或者是有一些其他的方式来实现这一目标?无论如何,我希望'公开'从我的URL中消失。

任何想法?

回答

4

如果你的.htaccess设置正确,你不必担心人们进入你的库文件夹,简单的重写规则可以防止这种情况。

以下是香港专业教育学院使用什么让我的index.php文件

$path = realpath(dirname(__FILE__)); 
$dirs = array(
     $path . '/library', 
     get_include_path() 
); 
$includes = implode(PATH_SEPARATOR, $dirs); 
set_include_path($includes); 

defined('APPLICATION_PATH') 
     || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application')); 

defined('APPLICATION_ENV') 
     || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 

require_once 'Zend/Application.php'; 

$application = new Zend_Application(
       APPLICATION_ENV, 
       APPLICATION_PATH . '/configs/application.ini' 
); 

摆脱公共目录的,这是我的.htaccess

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
Options -Indexes 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule \.svn/.* index.php [L] 
RewriteRule ^.*$ index.php [NC,L] 
</IfModule> 
2

这是错误的方法!我们拥有公用文件夹和几乎所有其他产品的原因都在同一级别,这是安全性的原因!我们不想让我们的库和应用程序代码在我们的公共文件夹中!

您需要更改的唯一一件事是您的服务器(apache)虚拟主机配置,以便它指向您的公用文件夹作为文档根目录。

<VirtualHost *:80> 
DocumentRoot /path/to/your/public/folder 
ServerName domain.com 
    <Directory path/to/your/public/folder> 
     AllowOverride All 
    </Directory> 
</VirtualHost> 
+0

我没有访问权限的共享主机要做到这一点。另外,在这种特殊情况下,Zend运行在一个子域上。像'sub.domain.com'' sub'只是'public_html'文件夹内的一个文件夹,所以每个Zend文件夹都可以通过'domain.com/application'来访问。无论如何.. – networkprofile 2011-04-22 19:59:46

+0

不一定是这样。只要你设置了htaccess权限和文件权限,你就不必担心了。 – Ascherer 2011-04-25 19:48:21

+0

即使共享主机提供了私人目录,你可以在其中放置代码。 – hakre 2011-05-15 17:07:18

1

This post提出一个很简单的方法(基本上,删除public,推动所有ZF文件到子文件夹),但它也引用了其他几种方法。

特别是对文章的评论表明,你可以简单地修改.htaccess文件在您的子下推所有请求到公共文件夹的根目录:

RewriteEngine on 
RewriteRule ^.* /public/$0 [L] 

然后在public文件夹,你保持标准.htaccess。在最坏的情况下,您还必须在Bootstrap期间设置应用程序的baseUrl,可能通过配置。

+0

我这样做,谢谢! – networkprofile 2011-04-29 15:51:12

+0

很高兴帮助。干杯! – 2011-04-29 16:57:49