【发布时间】:2015-11-12 02:02:57
【问题描述】:
目前我正在使用 OSX Server (Yosemite) 来托管一堆 PHP 应用程序,其中一些在网站文档根目录下有一个子目录,用于子域。自从更新到 OSX Server 的 Yosemite 版本后,这些子域一直抛出 500 错误,错误日志引用 RewriteEngine not allowed here。
调查,我已经确认父域和子域站点都配置了AllowOverride All,并且 .htaccess 文件在非子域站点上工作。此外,我发现重命名或以其他方式从父目录中删除 .htaccess 文件会导致子域重新开始工作。
/original_site_doc_root <- doc root for regular site
.htaccess
index.php
...
subdomain/ <- configured as a seperate site in osx server as a subdomain
.htaccess
index.php
...
我所做的每一点谷歌搜索最终都是指确保 mod_rewrite 已安装并且 AllowOverride 配置正确。
我的问题是,如何让 Apache 停止在子域网站上抛出 500 错误?
编辑
这是导致我悲伤的子域的 .htaccess 文件(域、目录和页面经过模糊处理以保护无辜者)
RewriteEngine On
Options +FollowSymlinks -Indexes
RewriteCond %{HTTP_HOST} ^www\.m\.somesite\.com$ [NC]
RewriteRule ^(.*)$ http://m.somesite.com/$1 [L,R=301]
RewriteBase /
# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
# enable PHP error logging
php_flag log_errors on
php_value error_log /some/fuzzed/dir
RewriteRule ^$ /index.php [L]
RewriteRule ^home$ /home.php [L]
RewriteRule ^some-page1$ /some-page1.php [L]
RewriteRule ^some-page2$ /some-page2.php [L]
RewriteRule ^some-page3/(.*)$ /some-page32.php [L]
RewriteRule ^some-page3(\/?)$ /some-page32.php [L]
RewriteRule ^some-page4/(.*)$ /some-page4.php [L]
RewriteRule ^some-page4(\/?)$ /some-page4.php [L]
RewriteRule ^some-page5/(.*)$ /some-page5.php [L]
RewriteRule ^some-page5(\/?)$ /some-page5.php [L]
RewriteRule ^some-page6/(.*)$ /some-page6.php [L]
RewriteRule ^some-page6(\/?)$ /some-page6.php [L]
父目录/非子域站点的 .htaccess 或多或少相似,唯一真正相关的区别是前 2 行:
RewriteEngine On
Options +FollowSymlinks -Indexes -Multiviews
【问题讨论】:
-
您是否在任何地方使用
RewriteOptions InheritXXXX? 文件系统上的父目录的.htaccess文件被继承,虽然mod_rewrite不是正常的。 -
.htaccess 文件都有
RewriteEngine on和Options +FollowSymlinks -Indexes以及一些非常标准的重写规则和条件。RewriteOptions InheritXXXX既不在任何 .htaccess 文件中,也不在httpd_server_app.conf中。 -
如果您“删除” 子域 的 .htaccess,您还会收到此错误吗? (授予您的网站可能无法正常工作。)我认为我们可能需要查看您的 .htaccess 文件(以排除明显的,如果有的话)。什么版本的 Apache?
-
您是否以任何方式解决了问题?
-
“我已经确认父域站点和子域站点都配置了
AllowOverride All” - 但是AllowOverride All指令具体设置在哪里?如果AllowOverride All仅在父域的 VirtualHost 中设置,那么您还需要在子域自己的(隔离的)VirtualHost 中重新声明它。
标签: apache .htaccess mod-rewrite