我在Linux ApacheWeb服务器上使用了Zend框架1,并且必须将其放在名为"go"的子文件夹中,我将带有以下行的.htaccess放在其中(在go文件夹中):
# Rewrite rules for Zend Framework
RewriteEngine on
RewriteRule ^(.*)$ /public/$1 [QSA,L]
进入 domain.com/go 后我得到的是:
未找到
在此服务器上找不到请求的 URL/index.php。
此外,在尝试 使用错误文档来处理请求。
我做错了什么?
将"/public"更改为"public"后,我也收到"未找到"错误。
我使用子域,例如:go.domain.com 我的应用程序,但我想知道为什么我的第一个方法不起作用?.htaccess 不适用于子目录吗?
你需要使用RewriteBase才能正常工作
RewriteBase /go
并且仍然将.htaccess放在 公共文件夹 ,而不是其他任何地方。
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
以下解决方案对我有用:
首先,将 .htaccess 文件放在 /go 目录中,其中包含以下内容
RewriteEngine on
RewriteRule ^(.*)$ public/$1 [NC,L]
这会将对 /go url 发出的每个请求重定向到公共目录。
接下来,确保/go/public/.htaccess 文件中没有任何RewriteBase
,除非需要。
最后,创建一个控制器插件并将以下代码放入routeStartup()
。
Zend_Controller_Front::getInstance()
->getRequest()
->setBaseUrl('/database/');
最后一步将使您能够仅使用$this->baseUrl()
助手轻松地将资源(css,js,图像)添加到HTML中。您不必为每个文件路径添加 /go。