目前我正在使用OSX Server(Yosemite)来托管一堆PHP应用程序,其中一些在子域名的网站文档根目录下有一个子目录。自从更新到Yosemite版本的OSX Server以来,这些子域一直在抛出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或多或少相似,唯一真正的相关性差异是前两行:
RewriteEngine On
Options +FollowSymlinks -Indexes -Multiviews
答案 0 :(得分:2)
刚遇到同样的问题(在最近更新Apache2之后)并找到了解决方案。
假设您的域名为example.com
且目录为/var/www/example/
,并且您有一个名为api.example.com
的子域名,目录为/var/www/example/api/
。
尝试使用以下内容:
<VirtualHost *:80>
ServerName api.example.com
DocumentRoot /var/www/example/api
<Directory /var/www/example/>
AllowOverride FileInfo Options
</Directory>
<Directory /var/www/example/api/>
Require all granted
Options +FollowSymLinks +MultiViews +ExecCGI -Indexes
AllowOverride all
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
这应该有效!
答案 1 :(得分:0)
自从更新到优胜美地版本的OSX服务器以来,这些子域一直在抛出500错误,错误日志引用
RewriteEngine not allowed here
。
OS X 10.10(Yosemite)附带Apache 2.4,而早期版本的OS X附带Apache 2.2。这些版本之间的一个重要区别是,AllowOverride
默认为Apache 2.2中的All
和Apache 2.4中的None
,这可能会给您带来问题。 (参见Apache Docs)您可能依赖于此默认行为。
我确认父网站和子网站都配置了
AllowOverride All
但是AllowOverride All
指令到底在哪里?我假设父域和子域站点配置为单独的虚拟主机。如果AllowOverride All
仅在父域的VirtualHost中设置,则对于&#34;父目录&#34; (子域名),当您访问子域时,将不会看到这个,这是一个完全独立的VirtualHost。您需要在子域自己的(隔离的)VirtualHost中重新声明这一点(如在@benck的回答中)。
或者,如果您根本不想处理父.htaccess
个文件,请在子域名的VirtualHost中明确设置以下内容:
<Directory /var/www/example/>
AllowOverride None
AllowOverrideList None
</Directory>
无论正在访问哪个主机, .htaccess
文件都沿着文件系统路径工作。
或者,如果主域配置在主服务器配置中(即不在VirtualHost容器中),那么您不应该遇到此问题,因为VirtualHost将继承服务器的配置。 / p>
参考:
https://en.wikipedia.org/wiki/MacOS_Server#OS_X_10.10_(Yosemite_Server_4.0)