目前,我正在使用 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 错误?
Edit
这是让我悲伤的子域的 .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 或多或少相似,唯一真正的相关性区别是前两行:
RewriteEngine On
Options +FollowSymlinks -Indexes -Multiviews