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

Zend framework 将请求重定向到公共目录zend,zend-framework,.htaccess,web-deployment,Zend Framework,.htaccess,Web Deployment,我有一个子域,我已经部署了我的zend应用程序,问题是它指向目录,比如说abc,我无法将它更改为指向public目录。有没有办法在根目录上放置.htaccess文件,该文件将重定向到public目录?能做到吗?还有别的办法吗 公共目录中的my index.php <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpa

我有一个子域,我已经部署了我的zend应用程序,问题是它指向目录,比如说
abc
,我无法将它更改为指向
public
目录。有没有办法在根目录上放置
.htaccess
文件,该文件将重定向到
public
目录?能做到吗?还有别的办法吗

公共目录中的my 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();
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

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

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路径请求设置(重写)相对根。第二个重写规则最终触发您的应用程序,它是一个本地路径。(我希望我没有弄错这最后一条规则。如果这不起作用,请在没有公众参与的情况下尝试。我无法测试它,但几年前我有一个应用程序可以像这样工作。)

我希望我正确地设置了您的域。如果你有这个设置

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路径请求设置(重写)相对根。第二个重写规则最终触发您的应用程序,它是一个本地路径。(我希望我没有弄错这最后一条规则。如果这条规则不起作用,请在没有公众参与的情况下尝试。我无法测试它,但几年前我有一个应用程序可以像这样工作。)

没有错误也没有问题



没有错误也没有问题。

@AlexHowansky您能提供一些指导吗?我如何创建一个这样的幻觉,即服务器指向的是
mysubdomain/public
当前指向的是子域的根如果您的web服务器配置将/path/to/abc设置为文档根,并且您无法更改它,那么只需删除即可(或重命名)/path/to/abc(如果存在)然后做:
ln-s/path/to/mysubdomain/public/path/to/abc
这将使/path/to/abc在web服务器上看起来是存在的,但它只是指向其他地方的应用程序的指针。只需完全删除公用文件夹。复制其所有内容并将其移动到目录
abc
。如果需要,只需调整index.php即可正确定义你的
应用程序\u路径
@drew010你能告诉我应该做什么更改吗我会发布index.php,.htaccess需要更改吗too@john无需更改
.htaccess
文件。您可能也不需要更改
应用程序路径,但这取决于存储文件的位置Zend应用程序文件。有问题的行是
define('APPLICATION\u PATH',realpath(dirname(\u\u FILE\u)。'/../APPLICATION'))
只需调整该定义的第二部分,以便
应用程序的路径正确。它可以位于
abc
目录中,或者您可以将其存储在web根目录之外,在这种情况下,它可能是
。/../application
而不仅仅是
。/application
@AlexHowansky您能提供一些信息吗i如何才能创建一个,从而产生服务器指向
mysubdomain/public
当前指向子域根的错觉如果您的web服务器配置已将/path/to/abc设置为文档根,并且您无法更改,则只需删除(或重命名)/path/to/abc(如果存在)然后做:
ln-s/path/to/mysubdomain/public/path/to/abc
这将使/path/to/abc在web服务器上看起来是存在的,但它只是指向其他地方的应用程序的指针。只需完全删除公用文件夹。复制其所有内容并将其移动到目录
abc
。如果需要,只需调整index.php即可正确定义你的
应用程序\u路径
@drew010你能告诉我应该做什么更改吗我会发布index.php,.htaccess需要更改吗too@john无需更改
.htaccess
文件。您可能也不需要更改
应用程序路径,但这取决于存储文件的位置Zend应用程序文件。有问题的行是
define('APPLICATION\u PATH',realpath(dirname(\u\u FILE\u)。'/../APPLICATION'));
只需调整该定义的第二部分,以便
应用程序的路径正确。它可以位于
abc
目录中,或者您可以将其存储在web根目录之外,在这种情况下,它可能是
。/../application
而不仅仅是
。/application
。错误仍然存在,它表示内部ser你可以在这里看到这个错误,这和我在根目录下放置.htaccess之前遇到的错误是一样的,我只是不明白为什么在索引控制器中显示主页,但是当我尝试访问同一索引控制器的另一个操作时,我得到了这个错误,因为找到了你的index.php任务正在寻找路径,因为路径不存在,所以出现了一个错误。但是/myroot中的.htaccess和RewriteBase应该可以解决这个问题。我找到了旧的配置,不知怎么的,它就是这样工作的。我尝试过复制这种情况,但我正在努力解决其他问题。不知怎么的,最简单的规则不起作用。我将称之为“不”w、 好的,只是对我的godaddy帐户的一个澄清,我已经创建了公共目录web服务器rootI,我也遇到了同样的问题,并应用了您的反馈。它在没有“public/”的情况下工作在您提到的上一个重写规则中。感谢您分享您的知识。错误仍然存在。它表示内部服务器错误。您可以在此处看到它。它与我在将.htaccess放在根目录之前遇到的错误相同,我只是无法理解w