我有一个,Amazon EC2 (amzn-ami-pv-2013.09.0.x86_64-ebs (ami-149f7863))
我在其上安装了Apache
,PHP
和MySQL
。
在我尝试激活之前,一切正常.htaccess
。
我更改AllOverride All
并http.conf
重新启动 Apache 服务。
当我添加文件时,即使 htaccess 无效,.htaccess
我也会收到。500 Internal Server Error
mod_rewrite.so 模块已加载
如果我删除 htaccess,一切就正常了。
我做错了什么?
--已编辑--
这是 .htaccess 内容
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^mywebsite.com
RewriteRule (.*) http://www.mywebsite.com/$1 [R=301,L]
但即使我将 htaccess 文件保留为空白,它也会返回 500 错误。
虚拟主机定义如下:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/mywebsite.com
ServerName mywebsite.com
</VirtualHost>
--编辑-2-
很抱歉,但我只通过从命令行创建 .htaccess 文件就解决了这个问题。现在一切正常。非常感谢你的帮助。
--编辑结束--
谢谢
答案1
您的 Apache 错误日志中写了什么?您的网站在没有.htaccess
安装任何插件的情况下也能加载,对吗?
根据我的经验,当出现 500 错误时,.htaccess
可能只是因为.htaccess
文件本身在文件系统上被弄乱了。我建议删除实际文件并创建一个新的.htaccess
。如果仍然显示 500 错误,则逐行.htaccess
注释掉每一行并重新加载页面。很有可能至少有一行有问题,这会显示出来。
编辑:自您添加内容以来,我仔细查看了您的.htaccess
内容,并认为我发现了问题所在。将其更改为如下内容:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.mywebsite.com/$1 [L,R=301]
看起来你的 RewriteCond 格式有问题。另外,我将其调整为以人类形式读取的方式:
如果此请求不是到www.mywebsite.com 然后重定向至 www.mywebsite.com。
这样你就可以清楚地抓住一切不是 www.mywebsite.com
并将它们发送到正确的域。
另外,在您的 Apache 配置中,我建议使用ServerAlias
来表示www.mywebsite.com
。看起来您正在使用NameVirtualHost
,因此将主服务器名称www.mywebsite.com
与别名一起使用mywebsite.com
是最有意义的。
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.mywebsite.com
ServerAlias mywebsite.com
DocumentRoot /var/www/html/mywebsite.com
</VirtualHost>
答案2
很难回答你的问题;正如你所说,文件.htaccess
本身不应该导致你的服务器返回错误。这意味着它可能是你在文件中写入的内容,或者可能是与 apache 设置的组合。
我建议你分享导致 500 错误的 tatVirtualHost
的定义和内容。.htaccess
我还建议您检查 apache 日志,如有必要调整配置以获得足够详细的日志来了解您的问题。
乍一看,我猜这是一个格式错误的ReWrite规则,因为这很容易做到。