【问题标题】:htaccess causing server error 500htaccess 导致服务器错误 500
【发布时间】:2011-08-30 00:54:27
【问题描述】:

我有一个 Zend Framework 应用程序,在根目录中有一个 .htaccess 文件,将所有流量定向到 /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)。

其他重写工作正常(至少据我所知)。

任何想法为什么会发生这种情况以及如何纠正这个问题?

提前致谢。

【问题讨论】:

  • 据我所知,“#”是配置(或 .htaccess)文件中唯一允许的注释字符,因此您的两个“注释”行实际上不是。来自Apache Server 2.x documentationLines that begin with the hash character "#" are considered comments, and are ignored. Comments may not be included on a line after a configuration directive.
  • 感谢您的评论。我实际上删除了“注释掉:我的 .htaccess 中的行,并且只将它们留在这里以供参考关于删除的内容。我不知道分号是无效的注释字符;)。

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


【解决方案1】:

为自己省去很多悲伤,并做到以下几点:

  1. 将文档根目录设置为public 目录。
  2. public 目录下的.htaccess 文件中设置rewrite rules in the VirtualHost entry 或使用标准Zend Framework rewrite rules

好的,鉴于您的共享主机限制,试试这个...

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

    // Define path to application directory
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', 'home/user/apps/my-app-name/application');
    

现在一切都应该“正常工作”,并且您的网站不会被 URL 中的“公共”一词访问。

【讨论】:

  • 我不能。这就是重点。它是一个共享主机,我无法访问 vhosts.conf,我需要依赖 mod-rewrite 将流量从根目录定向到 /public。如果这么简单,我会一开始就这样做,而无需编写自定义 .htaccess。
  • @mingos 我为您的问题添加了另一个解决方案
  • 嗯...需要重写部分代码(例如,我有一个公共和非公共upload 文件夹)...但值得一试...
  • 大部分有效。最后,我无法使用此解决方案,但这是我客户的服务器行为异常(托管公司使用一些定制版本的 Apache,其配置非常奇怪且 ZF 不友好,例如,不允许访问 docroot 之外的任何内容,离开我的应用程序目录不安全),但是!客户也对托管公司感到恼火,并搬到了更好的主机:)。不过感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多