我已经构建了一个具有语言选择器的单页网站。使用此选择器,网址将更改为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
答案 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 /
编辑:(更改了答案以实际匹配评论中到达的解决方案)