来自子目录的Zend应用程序正在获取工作正常的Zend布局链接


Zend Application from Sub directory getting Zend layout links working correctly

我在一个子目录中设置了一个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_dump路径,它看起来是这样的。

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

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

我看到的至少一个问题是.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 [OR]#请求指向一个符号链接文件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文件夹。您可以将application目录存储在系统上的任何位置,或者,如果由于文件系统限制而必须将其放置在dsa文件夹中,请确保向.htaccess文件添加一条规则,拒绝对application文件夹的所有访问。然后,您只需要使用APPLICATION_PATH常量快速更改index.php文件,告诉它application的正确路径。

我相信这两个改变应该能解决你的问题。

尝试在.htaccess.中设置RewriteBase /dsa