将.htaccess转换为nginx重写规则

时间:2014-05-23 15:02:34

标签: .htaccess mod-rewrite nginx

我试图将以下(PHPVibe).htaccess规则转换为gninx:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^embed/([^/]*)/$ /embed.php?id=$1 [L]
RewriteRule ^feed(.*)$ feed.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?rp=$1 [L]
</IfModule>
<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>

这是我到目前为止所做的:

    rewrite ^/embed/([^/]*)/$ /embed.php?id=$1 last;
    rewrite ^/feed(.*)$ /feed.php last;
if (!-f $request_filename){
    set $rule_2 1$rule_2;
}
if (!-d $request_filename){
    set $rule_2 2$rule_2;
}
if ($rule_2 = "21"){
    rewrite ^/(.*)/?$ /index.php?rp=$1 last;
}

上述内容大部分都有效,除了它在我的非mod_rewrite依赖页面上返回404这一事实。

3 个答案:

答案 0 :(得分:0)

尝试在其他RewriteRules

之前插入以下代码
RewriteRule ^moderator - [NC]

它应该导致重写引擎跳过以/ moderator /

开头的任何URL

答案 1 :(得分:0)

location / {
    try_files $uri $uri/ @index;
}

location /embed/ {
    rewrite ^/embed/([^/]+)/$ /embed.php?id=$1;
}

location /feed {
    rewrite ^ /feed.php;
}

location @index {
    rewrite ^/(.*)/?$ /index.php?rp=$1;
}

location ~ \.php$ {
    # fastcgi directives
}

答案 2 :(得分:0)

所以,经过一些调整后,我终于找到了适合nginx的重写指令。如果有人想知道。

    rewrite ^/embed/([^/]*)/$ /embed.php?id=$1 last;
    rewrite ^/feed(.*)$ /feed.php last;
if (!-e $request_filename)
    {
        rewrite ^/(.*)/?$ /index.php?rp=$1 last;
    }