0

我有一个子域,我已经部署了我的 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();

我的.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
4

2 回答 2

3
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]

没有错误也没有问题..

于 2014-01-10T21:42:52.927 回答
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 最终触发你的应用程序,它是一个本地路径。(我希望我对最后一条规则没有错。如果这不起作用,请在没有公众的情况下尝试。我无法测试它,但几年前我有一个应用程序可以像这样工作。)

于 2012-04-17T22:08:50.947 回答