Apache RewriteRule servererror 500

时间:2016-06-30 08:28:51

标签: apache .htaccess mod-rewrite

我已经构建了一个具有语言选择器的单页网站。使用此选择器,网址将更改为www.domain.com/en(或选择的语言)。

在我的开发人员服务器上,一切正常,但当我将其移至生产服务器时,我收到内部服务器错误500.

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^(scripts|images|external|css|img|js|downloads)($|/) - [L]
RewriteRule ^.*$ index.php [NC,L]

任何人都可以解决问题吗?

实时主机上的Apache版本是2.2.15,我的开发人员主持2.2.3

3 个答案:

答案 0 :(得分:0)

您应该删除上一个$中的最后一个RewriteRule

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^(scripts|images|external|css|img|js|downloads)($|/) - [L]
RewriteRule ^.*$ index.php? [NC,L]

$RewriteRule的第二个参数的保留字符(即:$1$2$3 ...)。如果您的查询字符串中需要$,则应将其转义\$

答案 1 :(得分:0)

问题是您没有从规则中排除目标,这就是为什么规则会导致无限循环错误

替换你的规则
RewriteRule ^((?!index\.php).*)$ index.php [NC,L]

答案 2 :(得分:0)

为目录设置RewriteBase,所以在这种情况下RewriteBase /

编辑:(更改了答案以实际匹配评论中到达的解决方案)