将请求重定向到公共目录zend

时间:2012-04-17 15:53:57

标签: zend-framework .htaccess web-deployment

我有一个子域,我已经部署了我的zend应用程序,问题是它指向目录说abc并且我无法将其更改为指向public目录是否存在我可以在根目录上放一个.htaccess文件,重定向到public目录?能做到吗?还有另一种方法可以完成它

我在公共目录中的index.php

<?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();

my .htaccess在公共目录

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

目前的目录结构如下

/myroot
 -.settings
 -application
 -docs
 -library
 -public
 -tests
 -.buildpath
 -.proect
 -.zfproject.xml

2 个答案:

答案 0 :(得分:2)

RewriteEngine On
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^public/.*$ /public/index.php [NC,L]

没有错误也没有问题..

答案 1 :(得分:1)

我希望我能正确设置你的域名。如果你有这个设置

sub.domain.net --> /myroot

您需要在该(/ myroot)文件夹中使用.htaccess,因为它是您的http请求的基础。看起来应该是这样的

RewriteEngine On  
RewriteBase /public  
RewriteCond %{REQUEST_FILENAME} -s [OR]  
RewriteCond %{REQUEST_FILENAME} -l [OR]  
RewriteCond %{REQUEST_FILENAME} -d  
RewriteRule ^.*$ - [NC,L]  
RewriteRule ^.*$ public/index.php [NC,L]  

RewriteBase指令应该在RewriteCond中找到所有请求,并主要应用于第一个RewriteRule。它基本上设置(重写)所有HTTP路径请求的相对根。第二个RewriteRule最终会触发您的应用程序,这是一个本地路径。 (我希望我对这最后一条规则没有错。如果不起作用,请尝试不公开。我无法测试它,但几年前我有一个应用程序可以像这样工作。)