【问题标题】:How to remove "public" from url using routeing in zend framework如何使用zend框架中的路由从url中删除“public”
【发布时间】:2012-04-07 17:24:41
【问题描述】:

我的 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 LIKE www.domain-name.com/en/中设置语言代码,使用zend_controller_router_route_chain强>,

在此方法实施之前,我的网址是 www.domain-name.com 但是
当我在我的 zend 项目中使用此方法时,可能是它覆盖了从 URL 中删除“public”的 .htaccess 规则,或者使用相同的方法发生了某些事情,并且“public”显示在 url 中,例如 www.domain-name.com/public

那么是否有任何方法或技巧可以在 ZEND 框架中使用任何 ROUTE 方法从 URL 中删除 PUBLIC ???

谢谢,

MRJethva

【问题讨论】:

    标签: zend-framework routes


    【解决方案1】:

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

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

    类似的例子见this answer的最后部分。

    【讨论】:

    • 没有 APPLICATION_PATH 常量我如何找到它??
    【解决方案2】:

    以下适用于我使用 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/

    【讨论】:

    • 它工作正常,但现在无法从图像文件夹中获取图像。你能帮我解决这个问题吗?
    【解决方案3】:

    zf2 和 zf3 从 URL 中删除 Public

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

    在 index.php 中添加该行 include_once("public/index.php");

    在 .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] 
    

    然后去下面的路径

    模块->应用程序(模块名称)->视图->布局->layout.phtml 更改css和js路径在路径中添加public

    之前

    ->prependStylesheet($this->basePath('css/bootstrap.min.css'))

    ->prependFile($this->basePath('js/bootstrap.min.js'))

    之后

    ->prependStylesheet($this->basePath('public/css/bootstrap.min.css'))

    ->prependFile($this->basePath('public/js/bootstrap.min.js'))

    也在图片路径中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 2012-12-30
      • 2010-11-28
      • 2015-11-17
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多