为什么没有重定向的重写规则会产生500错误?

时间:2013-10-11 10:57:19

标签: .htaccess rewrite

我想重写像

这样的网址
mysite.com/eng?sentence=cat

显示如下:

mysite.com/eng/cat

我不想重定向只是重写。所以我尝试改变我发现的重写规则,我编辑之前的例子最初有一个R = 301:

RewriteCond %{THE_REQUEST} ^GET\ /eng\?sentence=([^&\s]+) [NC]
RewriteRule ^eng\?sentence=$ /english/%1? [R=302,NC,L]

但是当我从第2行移除R = 301时,它会产生500错误。

我该如何编写这种重写规则?我对这个正则表达式的东西不是很好,我也不熟悉这个

我的htaccess文件:

# Use PHP5.3 Single php.ini as default
AddHandler application/x-httpd-php54s .php
AddType application/x-httpd-php .htm .html

Options -Indexes -MultiViews

ErrorDocument 404 /404.php
ErrorDocument 500 /500.php

RewriteEngine on

RewriteCond %{THE_REQUEST} ^GET\ /eng\?sentence=([^&\s]+) [NC]
RewriteRule ^eng\?sentence=$ /english/%1? [R=302,NC,L]



RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=604800, public"
</FilesMatch>

1 个答案:

答案 0 :(得分:0)

使用行结束锚$或者只需回复RewriteCond

RewriteCond %{THE_REQUEST} ^GET\s/eng\?sentence=([^&\s]+) [NC]
RewriteRule ^ /eng/%1? [NC,L,R=302]

很可能500是由于.htaccess中的其他规则导致的循环。我建议您在问题中发布完整的.htaccess代码。