2011-04-22 96 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