如何将文档根目录“移动”一级到公共目录?

时间:2015-04-01 18:54:37

标签: php .htaccess mod-rewrite zend-framework

我将这个重写代码从post复制到Zend。

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]

它的想法是将文档根目录向上移动到公共目录而不触及或修改虚拟主机文件

所以我在我的localhost上的虚拟项目上测试它,看看它是否适用于我的本地机器。 但它没有。我仍然需要点击公共文件夹才能看到网络内容。

这是我的目录,

.htaccess
public/
   .htaccess
   index.php

的index.php,

<?php

// Show all information, defaults to INFO_ALL
phpinfo();

我也在我的实时服务器上测试了它。重写代码根本不会将文档根目录向上移动到公共目录。

我错过了哪些想法?

我在我的Zend(Zend 2)项目上进行了测试,但它也没有用。我仍然需要点击公共文件夹才能看到网络内容。

有什么想法吗?

修改

/public/.htaccess的内容

RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

我必须使用此网址查看网页

http://{localhost}/a-project/public/

代替,

http://{localhost}/a-project/

在实时服务器上是一样的,我必须使用

http://my-website.com/public/

代替,

http://my-website.com/ 

我认为根目录中的.htaccess可以将文档根目录向上移动到公共目录而不触及或修改虚拟主机文件,但它不能 ...

2 个答案:

答案 0 :(得分:1)

DocumentRoot .htaccess:

中试用此规则
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*) public/$1 [L]

答案 1 :(得分:1)

您不应该在public_html目录中上传项目。您应该将项目上传到父目录,并将public目录重命名为public_html

在某些服务器中注意文档根目录不是public_html。它可能类似于wwwhtdocs,..

这种分离是为了提高安全性,强制用户只使用index.php发送请求,他们无法访问父目录并直接运行脚本。

*您也可以使用.htaccess,但我不推荐