我在根目录中有一个带有.htaccess
文件的Zend Framework应用程序,将所有流量定向到/public
所在的index.php
目录。
这是.htaccess
:
RewriteEngine On
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/(upload|img|js|css|less)/.*$
RewriteCond %{DOCUMENT_ROOT}/public/upload%{REQUEST_URI} -f
RewriteRule ^(.+\.(jpg|png|mp3))$ /public/upload%{REQUEST_URI} [NC,L]
;RewriteCond %{REQUEST_URI} !^/public/.*$
;RewriteRule ^(.*)$ /public/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^public/.*$ /public/index.php [NC,L]
如您所见,有两条注释掉的行。
该部分据称将流量引导至/public
,并且在我的本地服务器和共享主机上运行,似乎在我的客户端服务器上失败了。
因此,在两行注释掉的情况下,当我在浏览器中输入网站的地址时,我会得到一个目录列表。当我将/public
附加到地址时,我按预期被带到/public/index.php
,但由于请求未被正确重定向,因此JS和CSS文件都没有。
当我取消注释这些行时,我收到500内部服务器错误(根本没有达到index.php
)。
另一个重写工作正常(至少据我所知)。
为什么会发生这种情况以及如何解决这个问题?
提前致谢。
答案 0 :(得分:1)
为自己省去很多悲伤并做以下事情:
public
目录。.htaccess
目录中public
文件中的标准Zend Framework rewrite rules。好的,鉴于您的共享托管限制,请尝试一下...
public
个文件放入您的文档根目录,包括上面步骤2中提到的.htaccess
文件application
,library
)放在文件系统的任何位置,最好放在Web文档根目录之外。一个例子可能是/home/user/apps/my-app-name/
使用新的index.php
修改APPLICATION_PATH
文件,例如
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', 'home/user/apps/my-app-name/application');
现在一切都应该“正常工作”,并且网址中的“公共”一词不会访问您的网站。