【问题标题】:RewriteRule 500 Error QuestionRewriteRule 500 错误问题
【发布时间】:2011-04-20 22:54:22
【问题描述】:

我设置了以下重写规则:

RewriteEngine On

RewriteRule ^api/([A-Za-z0-9-]+)$ index.php/api/$1 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)$ index.php/other/$1 [NC,L]

不幸的是,这些会导致我的服务器抛出 500 错误。单独来看,它们都可以正常工作。

我的意图是如果请求是http://somesite.com/api/whatever/,第一条规则将被触发,重定向到index.php/api/whatever/

如果“api”以外的任何内容作为第二段发送,它将重定向到index.php/other/whatever

我的理解是否存在某种缺陷?我认为它会在列表中出现,并且带有 L 标志,一旦它碰到什么东西就会停止执行。还是我的语法错误?

干杯

【问题讨论】:

    标签: php apache .htaccess mod-rewrite apache2


    【解决方案1】:
    1. 每当您获得 500 时,请检查 /var/log/httpd/error_log(或系统上的等效路径。)
    2. 我很确定你的字符组中的连字符是一个正则表达式语法错误。 (另外,[NC] 标志使 [A-Za-z] 多余

    试试:

    RewriteRule ^api/([-A-Z0-9]+)$ index.php/api/$1 [NC,L]
    RewriteRule ^([-A-Z0-9]+)$ index.php/other/$1 [NC,L]
    

    或许

    RewriteRule ^api/([^/]+)$ index.php/api/$1 [NC,L]
    RewriteRule ^([^/]+)$ index.php/other/$1 [NC,L]
    

    【讨论】:

    【解决方案2】:

    我认为你需要QSA flag,试试这样:

    RewriteRule ^api/(.*)$ index.php/api/$1 [QSA,NC,L]
    RewriteRule ^(.*)$ index.php/other/$1 [QSA,NC,L]
    

    【讨论】:

    • 由于没有人评论否决票:当您修改查询字符串并希望将原始字符串附加到您在重写中定义的新字符串时使用 [QSA]。这里没有查询字符串(所以保持不变)
    • 感谢您的解释。但是我在我的本地配置上尝试了这些重写规则,它只在使用 QSA 标志时才能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2014-01-01
    • 2015-09-30
    • 1970-01-01
    • 2013-06-11
    • 2012-02-19
    相关资源
    最近更新 更多