如何在zend框架中使用路由从url中删除“public”

时间:2012-03-23 04:54:13

标签: zend-framework routes

我的zend中有一个问题,我在.htaccess中编写规则,将url中的“public”删除,如下所示,

------------------------------------------------------------------------ 
RewriteEngine On

RewriteCond %{HTTP_HOST} ^domain-name.com/$ [OR]<br/>
ReWriteCond %{REQUEST_URI} !public/<br/>
ReWriteRule ^(.*)$ public/$1 [L]<br/>
------------------------------------------------------------------------ 

但是在zend中有ROUTE方法,我已经使用它用于多种语言在URL中设置语言代码 www.domain-name.com/en / ,使用 zend_controller_router_route_chain

在此方法实施之前,我的网址是 www.domain-name.com 但是 当我在我的zend项目中使用这个方法时,可能会覆盖.htaccess从URL中删除“public”的规则或者使用相同的东西发生的事情,而“public”在URL中显示如 www.domain-name.com/public

因此,在ZEND框架中使用 ROUTE 的任何方法是否有任何方法或从网上删除公共网页

谢谢,

MRJethva

3 个答案:

答案 0 :(得分:9)

以下适用于我使用ZF2.2

在ZF2根目录上创建index.php并添加以下内容:

<?php 
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';

在ZF2根目录上创建.htaccess并添加以下内容:

SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteRule .* index.php

最后,在layout.phtml文件的顶部添加此条件语句:

<?php 
if (defined('RUNNING_FROM_ROOT')) {
  $this->plugin('basePath')->setBasePath($this->basePath().'/public');
} ?>

享受!

参考:http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/

答案 1 :(得分:2)

是的,您不需要Zend_Route。删除public文件夹并将Zend Framework文件(index.php.htaccess等)放入根目录(例如htdocs)。您可以将application文件夹和其他Zend Framework文件放在Web根目录之外的无法通过HTTP访问的位置。

您需要做的只是修改index.php并将APPLICATION_PATH更改为正确的路径。这样Zend应用程序将从您的根目录运行,您不需要使用mod_rewrite来隐藏公用文件夹。

有关类似示例,请参阅this answer的最后一部分。

答案 2 :(得分:0)

zf2和zf3从网址

中删除公开

创建index.php和.htaccess在项目根目录中添加文件

在index.php中添加这一行 的 include_once(&#34;公共/ index.php的&#34);

和.htaccess文件

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 

之后转到以下路径

模块 - &gt;应用程序(模块名称) - &gt; view-&gt; layout-&gt; layout.phtml 更改css和js路径在路径中添加public

- &GT; prependStylesheet($这 - &GT;基本路径(&#39; CSS / bootstrap.min.css&#39;))

- &GT; prependFile($这 - &GT;基本路径(&#39; JS / bootstrap.min.js&#39;))

- &GT; prependStylesheet($这 - &GT;基本路径(&#39;公共/ CSS / bootstrap.min.css&#39;))

- &GT; prependFile($这 - &GT;基本路径(&#39;公共/ JS / bootstrap.min.js&#39;))

也在图片路径中