>我有一个子域,我已经将我的 zend 应用程序部署到其中,问题是它指向目录说abc
,我无法将其更改为指向public
目录有没有办法我可以在根目录上放置一个 .htaccess
文件,该文件将重定向到 public
目录? 能做到吗? 有没有其他方法可以完成它
我的索引.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
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]
没有错误,也没有问题..
我希望我能正确设置您的域。如果您有此设置
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路径请求的相对根。第二个重写规则最终触发您的应用程序,这是一个本地路径。(我希望我对这最后一条规则没有错。如果这不起作用,请尝试没有公众。我无法测试它,但几年前我有一个这样的应用程序。