我希望服务器上的public_html文件夹成为我的zend项目中的公共文件夹。 你们知道我怎么能这样做吗?现在我必须使用domain.com/public
查看我的网站我尝试将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
或者还有其他方法可以实现这一目标吗?无论如何,我希望“公开”从我的网址中删除。
有什么想法吗?
答案 0 :(得分:3)
如果您的.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>
答案 1 :(得分:2)
这是错误的做法!我们有一个公共文件夹,几乎所有其他东西都在同一级别的原因是安全的原因!我们不希望将我们的库和应用程序代码放在公共文件夹中!
您唯一需要更改的是您的服务器(apache)vhost配置,以便它指向您的公用文件夹作为文档根目录。
<VirtualHost *:80>
DocumentRoot /path/to/your/public/folder
ServerName domain.com
<Directory path/to/your/public/folder>
AllowOverride All
</Directory>
</VirtualHost>
答案 2 :(得分:0)
This post建议了一种非常简单的方法(基本上,删除public
并将所有ZF文件推送到子文件夹中),但它也引用了其他几种方法。
特别是,对该帖子的评论建议您只需修改子域根目录下的.htaccess
文件,将所有请求推送到公共文件夹中:
RewriteEngine on
RewriteRule ^.* /public/$0 [L]
然后在public
文件夹中保留标准.htaccess
。在最坏的情况下,您还必须在baseUrl
期间设置应用的Bootstrap
,可能是通过配置。