这是我的.htaccess
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
这两行是问题
RewriteCond %{HTTPS} != on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
...
RewriteRule ^/?$ index.php
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ index.php
</IfModule>
有谁知道为什么这是一个内部服务器错误以及如何解决它,我有一个规则阻止用户访问非https版本,另一个规则重写url和重定向。我使用控制器来处理所有网页。
答案 0 :(得分:1)
试试这个。主要更改是https
检测以及使用REQUEST_FILENAME
而不是SCRIPT_FILENAME
:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
RewriteRule ^/?$ index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php
</IfModule>
对于类似这样的事情,一个好的调试技术是如果你在Unix / Linux或Mac OS X中那么从命令行使用curl -I
。这将返回头信息,包括重定向和放大器。这样。例如,以下是curl -I
上Google的http://google.com/
输出:
curl -I http://google.com/
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Wed, 18 Jun 2014 23:20:00 GMT
Expires: Fri, 18 Jul 2014 23:20:00 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic
请注意HTTP/1.1 301 Moved Permanently
和Location: http://www.google.com/
行。这告诉您Google的服务器已设置为将google.com
个请求重定向到www.google.com
。与在浏览器中加载URL相比,在您自己的本地规则上使用它是一种很好的调试方法。处理缓存的内容问题。
编辑:因为在您的评论中您解释了所有内容的完成情况index.php
,请尝试使用此默认WordPress .htaccess
的稍微修改版本:
<IfModule mod_rewrite.c>
RewriteEngine On
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>