【问题标题】:What should I use .htaccess for in Zend Framework 1.9.5 application?我应该在 Zend Framework 1.9.5 应用程序中使用 .htaccess 做什么?
【发布时间】:2009-11-24 16:11:57
【问题描述】:

我已经编写了几个 Web MVC 应用程序,但以前从未使用 PHP,我正在尝试找出使用 Zend Framework v1.9.5 的最佳方法。

我对 .htaccess 在 Zend Framework 1.9.5 应用程序中的作用感到困惑。我查阅了很多关于 Zend Framework 的教程、书籍和 SO 问题(但其中大部分是针对最新的 v1.8 的),它们都谈到了 .htaccess 文件的核心作用。我收集到 .htaccess 可用于支持虚拟主机、URL 重写,并允许 Apache 在不通过 index.php 的情况下提供静态文件,但我不确定这是否是当前的做法或在 v1.9.5 中是否仍然必要。

目前我已经编写了几个非常简单的(HTML、CSS、jQuery)Zend Framework 应用程序,并在测试 Ubuntu Server 9.10 环境中为它们创建了 Apache 虚拟主机。我根本没有使用任何 .htaccess 文件,而且这些应用程序似乎运行良好。

这是我到目前为止所做的:

我使用 Eclipse/PDT 和 zf.sh 工具创建了我的应用程序。我将 css、images 和 js 目录添加到“zf create project”生成的公共目录中。这些应用在我的本地 MAMP 安装上运行良好。

在服务器上,我在 /usr/local/Zend/share/ZendFramework-1.9.5 中安装了 Zend Framework,并将 /usr/local/Zend/share/ZendFramework-1.9.5/library 添加到 'include_path' 中php.ini.

我将应用程序复制到服务器目录 /home/myadmin/public_html/domain[12]/com。

我通过在 Apache 可用站点目录中添加条目来创建虚拟主机,如 Slicehost Virtual Host Setup 中所述。我分配 DirectoryIndex = index.php 和 DocumentRoot = /home/myadmin/public_html/domain[12]/com/public。这两个应用程序似乎都运行良好。

我需要使用 .htaccess 文件吗?为了什么?

*** EDIT - My Solution

根据 Richard 的链接,我将通常存在于 .htaccess 中的重写语句移到了我的虚拟主机定义中,现在我的应用程序不使用 .htaccess 文件。我的 domain1.com 虚拟主机文件如下所示:

<VirtualHost *:80>
  # Define admin email, server name, and any aliases
  ServerAdmin webmaster@domain1.com
  ServerName domain1.com
  ServerAlias www.domain1.com

  # Only serve files from inside this directory
  DocumentRoot /home/myadmin/public_html/domain1.com/public

  # Directly serve any requested files that exist in DocumentRoot;
  # otherwise redirect the request to the index.php script
  RewriteEngine off
  <Location />
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ /index.php [NC,L]
  </Location>

  # Set up log file locations
  LogLevel warn
  ErrorLog /home/myadmin/public_html/domain1.com/data/logs/error.log
  CustomLog /home/myadmin/public_html/domain1.com/data/logs/access.log combined
</VirtualHost>

【问题讨论】:

    标签: php apache zend-framework


    【解决方案1】:

    .htaccess 用于 zend 框架和大多数 php 框架的一个主要用途是将所有请求(静态文件除外)重定向到引导文件。您不一定需要它,但您的 URL 最终会看起来像 /index.php/controller/action 而不是 /controller/action

    您也可以直接将重写规则添加到您的 apache 配置中。

    【讨论】:

    • ZF 1.9.5 在不使用 .htaccess 的情况下执行自己的路由。默认情况下,如果我定义一个操作“zf create action getit controller”,则 url 是“/controller/getit”。也可以使用 index.php 中的 $Router->addRoute() 进行大量自定义。
    • 使用 zend 框架命令行工具时,它会在公共目录中创建 htaccess 文件。
    • 没错!奇怪的是 Eclipse/PHT 没有显示它,但命令行确认了它。这个 .htaccess 文件与 ZF 路由器的作用是什么?
    • .htaccess 文件有助于稍微清理 url。有一个引导应用程序的文件。在大多数情况下,index.php。所有请求都发送到此文件,框架(路由器)从那里处理它们,并将它们发送到正确的控制器/动作。如果没有 .htaccess 文件,您将无法使用 url domain.com/controller/action。它必须是 domain.com/index.php/controller/action。如果您不想使用 .htaccess 文件,您可以采用重写规则并将它们添加到虚拟主机条目中。希望这会有所帮助!
    【解决方案2】:

    VirtualHost 配置和.htaccess 文件是 Zend Framework 中URL rewriting 的两个替代方案。它们执行相同的功能,您不需要两者。

    URL 重写只是将所有对非静态文件的请求定向到您的index.php。

    Routing 是分解请求 URI 并确定应该执行哪个模块/控制器/动作的过程。这是一个与 URL 重写相关但独立的函数。

    【讨论】:

    • 通过两个非常有用的链接准确回答。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-02-12
    • 2015-05-11
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多