htaccess导致服务器错误500

时间:2011-08-30 00:54:28

标签: .htaccess zend-framework internal-server-error

我在根目录中有一个带有.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)。

另一个重写工作正常(至少据我所知)。

为什么会发生这种情况以及如何解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:1)

为自己省去很多悲伤并做以下事情:

  1. 将文档根目录设置为public目录。
  2. 设置rewrite rules in the VirtualHost entry或使用.htaccess目录中public文件中的标准Zend Framework rewrite rules
  3. 好的,鉴于您的共享托管限制,请尝试一下...

    1. 将所有public个文件放入您的文档根目录,包括上面步骤2中提到的.htaccess文件
    2. 将其余文件夹(即applicationlibrary)放在文件系统的任何位置,最好放在Web文档根目录之外。一个例子可能是/home/user/apps/my-app-name/
    3. 使用新的index.php修改APPLICATION_PATH文件,例如

      // Define path to application directory
      defined('APPLICATION_PATH')
          || define('APPLICATION_PATH', 'home/user/apps/my-app-name/application');
      
    4. 现在一切都应该“正常工作”,并且网址中的“公共”一词不会访问您的网站。