htaccess重写规则给出500服务器错误

时间:2014-01-21 06:10:50

标签: regex apache .htaccess mod-rewrite rewrite

我知道这里有很多帖子已经描述了这个完全相同的问题,但我一直在仔细研究它们并尝试不同的解决方案无济于事。

我正在尝试在末尾重写带有查询字符串的URL,并将查询字符串的值写入URL的末尾。我已尝试过无数答案中的大量模式,但我不断更改URL或500内部服务器错误。

这是我的htaccess:

RewriteEngine On
Options +FollowSymlinks
Options All -Indexes
ErrorDocument 404 http://domain.com/oh/shit/you/broke/the/internet
RewriteRule ^oh/shit/you/broke/the/internet$ /404.php [L]
RewriteRule ^email/([^/]+)/?$ /email/?name=$1 [L,NC,QSA]

我希望将http://domain.com/email/?name=blah重写为http://domain.com/email/blah

我在这里缺少什么?

=====

编辑:

查看完日志后,我发现了以下很多错误:

Invalid command '^email/([^/]+)/?$', perhaps misspelled or defined by a module not included in the server configuration
Invalid command '^/email/([^/]+)/?$', perhaps misspelled or defined by a module not included in the server configuration
File does not exist: /home/username/domain.com/email/blah

这是包含修复后的完整htaccess文件:

RewriteEngine On
Options +FollowSymlinks
Options All -Indexes
ErrorDocument 404 http://domain.com/oh/shit/you/broke/the/internet
RewriteRule ^oh/shit/you/broke/the/internet$ /404.php [L]
RewriteCond %{THE_REQUEST} \s/+email/?\?name=([^\s&]+) [NC]
RewriteRule ^ /email/%1? [R=301,L]
RewriteRule ^email/([^/]+)/?$ /email/?name=$1 [L,NC,QSA]

1 个答案:

答案 0 :(得分:1)

你的语法错误。您的代码没有RewriteRule个关键字。

尝试此规则:

RewriteEngine On
Options +FollowSymlinks
Options All -Indexes

RewriteCond %{THE_REQUEST} \s/+email/?\?name=([^\s&]+) [NC]
RewriteRule ^ /email/%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^email/([^/]+)/?$ /email/?name=$1 [L,NC,QSA]