重写规则问题,在一台服务器上导致500错误,而在另一台服务器上导致错误

时间:2012-11-23 12:09:44

标签: apache mod-rewrite

我有一个.htaccess:

Options -MultiViews
#Rewrite queries from google to the right files
RewriteEngine On

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^(.*) /fragments/%1.html

在我的服务器(标准LAMP debian)上,它可以完美运行。 一旦我将其上传到主机(1& 1),我就会收到500错误,并且每1&1的自己的策略都无法检查错误日志。

技术支持花了2周的时间来回答我的支持请求,当他们这样做时,他们指向了一个描述mod_rewrite的通用页面。

任何人都可以在重写规则/条件中发现语法错误,并最终提供另一种方法来执行该规则的操作吗?

2 个答案:

答案 0 :(得分:0)

500错误意味着服务器设置出现问题(500 - 内部服务器错误)。

有可能:

1)您的服务器不支持.htaccess文件覆盖主机设置

2)未启用重写模块

3)htaccess中重写的语法不正确

据我所知,您的代码是正确的。那么可能是1或2选项。

我建议:

1)用下面包装你的重写代码(这将检查mod-rewrite是否打开)

<IfModule mod_rewrite.c>
...
</IfModule>

2)从.htaccess删除所有内容并尝试清空(如果仍然是500 - 不允许覆盖)

3)我在代码中看不到DirectoryIndex your_index_file。你没有省略吗?

答案 1 :(得分:0)

使用以下内容:

Options -MultiViews
#Rewrite queries from google to the right files
RewriteEngine On

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^(.*) http://mydomain.com/fragments%1.html?

解决了这个问题。