lum*_*ked 4 php .htaccess zend-framework
我在子目录中设置了Zend应用程序.不要问为什么我只是这样做(不是我喜欢的方法),但我没有那个选择.Zend应用程序驻留在一个名为dsa的子目录中.
http://dsa.dev/dsa
Run Code Online (Sandbox Code Playgroud)
我的.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ public/index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)
这有效并将引导应用程序.我可以毫无问题地进入我的根目录和其他目录.
在我的application.ini我已经设置
resources.frontController.baseUrl = "/dsa".
Run Code Online (Sandbox Code Playgroud)
在我的layout.phtml文件中如果我var_dump路径它看起来像这样.
var_dump($this->baseUrl('css/main.css'));
http://dsa.dev/dsa/css/main.css
Run Code Online (Sandbox Code Playgroud)
没有链接工作,所有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]
Run Code Online (Sandbox Code Playgroud)
这些规则等同于:
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]
Run Code Online (Sandbox Code Playgroud)
这表示,如果请求是针对大小> 0的文件,目录或符号链接,则将请求路由到请求的实际文件(RewriteRule ^.*$ -).如果这些条件都不成立,则将请求重写为index.php.
另外,我会继续public完全摆脱目录.把内容拿出来public放进去/dsa. dsa现在是你的public文件夹.您可以将application目录存储在系统上的任何位置,或者dsa由于文件系统限制而必须将其放在文件夹中,请确保向您的.htaccess文件添加拒绝对该application文件夹的所有访问的规则.然后你只需要快速更改你的index.php文件,告诉它application使用APPLICATION_PATH常量的正确途径.
我相信这两个变化应该可以解决你的问题.