Php 子目录中的Zend应用程序获得正确的Zend布局链接

Php 子目录中的Zend应用程序获得正确的Zend布局链接,php,zend-framework,.htaccess,Php,Zend Framework,.htaccess,我在一个子目录中设置了一个Zend应用程序。不要问我为什么要这样做(不是我喜欢的方法),但我没有选择。Zend应用程序位于名为dsa的子目录中 http://dsa.dev/dsa 我的.htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(

我在一个子目录中设置了一个Zend应用程序。不要问我为什么要这样做(不是我喜欢的方法),但我没有选择。Zend应用程序位于名为dsa的子目录中

http://dsa.dev/dsa
我的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ public/index.php [QSA,L] 
这将起作用并引导应用程序。我可以去我的根目录和其他目录的其他事情没有任何问题

在application.ini中,我设置了

resources.frontController.baseUrl = "/dsa".  
在我的layout.phtml文件中,如果我var_转储路径,它看起来像这样

var_dump($this->baseUrl('css/main.css'));
http://dsa.dev/dsa/css/main.css

所有链接都不起作用,所有css和js文件都没有正确链接。如果你点击F12并查看它们,你会发现任何文件都找不到404。我需要做什么才能获得正确的路径来显示文件。这是我第一次尝试在子目录中设置zend,显然我做得不对。关于这个问题,我已经读了所有我能找到的东西。感谢您的帮助。

尝试在.htaccess中设置一个
重写库/dsa

我发现至少一个问题是
.htaccess
文件中的重写规则不正确

鉴于这些规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ public/index.php [QSA,L]
这些规则等同于:

RewriteCond%{REQUEST_FILENAME}-s[OR]
#请求是一个大小大于0的常规文件
RewriteCond%{REQUEST_FILENAME}-l[或]
#该请求指向一个符号链接的文件
RewriteCond%{REQUEST_FILENAME}-d[OR]
#请求指向存在的目录

如果上述任何一项为真,请求将被重写为不正确的
public/index.php
。如果请求是针对磁盘上存在的文件,则不希望重写该文件;相反,你只想提供那个文件

正确的
.htaccess
文件应如下所示:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ public/index.php [NC,L]
也就是说,如果请求的文件大小大于0、目录或符号链接,则将请求路由到实际请求的文件(
RewriteRule^.*$-
)。如果这些条件都不是真的,那么将请求重写为index.php

另一方面,我将继续并彻底删除
public
目录。将
public
的内容放入
/dsa
dsa
现在是您的
public
文件夹。您可以将
应用程序
目录存储在系统上的任何位置,或者如果由于文件系统限制而必须将其放在
dsa
文件夹中,请确保在
.htaccess
文件中添加拒绝对
应用程序
文件夹的所有访问的规则。然后,您只需要使用
application\u path
常量快速更改
index.php
文件,告诉它
application
的正确路径


我相信这两个改变会解决你的问题。

创建一个虚假帐户,这样我就可以对它进行两次更新投票,这是错误的吗?回答得好@也许是菲尔,但我没有反对;)jk。谢谢你的评论/谢谢你的这篇文章,非常好,直截了当。我正在仔细研究并制定你的建议。我已经尝试了所有这些,但在处理方式上没有发现任何差异。