Nginx 使用 php 参数重写规则

Nginx 使用 php 参数重写规则

我有两个网站,

http://localhost/bb--phpbb

http://localhost/dp-- Drupal

我希望重定向$server_name/bb/ucp.php?mode=logout&sid=xxxxx$server_name/dp/user/logout,sid 应该被忽略。

我尝试过这个:

location /bb/
{
    index index.php;
    if ($query_string ~* "mode=logout$")
    {
        rewrite ^/bb/ucp\.php http://$server_name/dp/user/logout redirect;
    }
}

似乎不起作用。有人能帮忙吗?谢谢。


我也尝试过这个:

location /bb/
{
    index index.php;
    if ($arg_mode ~* "logout") ## and = instead of ~* too.
    {
        rewrite ^/bb/ucp\.php http://$server_name/dp/user/logout redirect;
    }
}

但它也不起作用。


当前整体配置:

server {
    listen       80;
    server_name  localhost;
    add_header X-Frame-Options "SAMEORIGIN";

    client_max_body_size 500M;
    root   /var/www;

    location / {
        index  index.html index.htm index.php;
        try_files $uri @rewrite;
    }

    location /bb/
    {
        index index.php;
        if ($arg_mode = "logout")
        {
            rewrite ^/bb/ucp\.php http://$server_name/dp/user/logout redirect;
        }
    }

    location @rewrite {
        # needed by Drupal
        rewrite ^/([^/]*)/(.*)(/?)$ /$1/index.php?q=$2&$args;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

(未按预期工作)

答案1

您应该直接检查参数值。

if ($arg_mode = "logout") {

答案2

您可以使用直接参数检查:

if ($arg_mode = "logout")
{
    rewrite ^/bb/ucp\.php http://$server_name/dp/user/logout redirect;
}

但是您的方法似乎也是合法的,除了一个错误的正则表达式。您$在末尾有一个符号,表示行尾,而在您的示例中,它$server_name/bb/ucp.php?mode=logout&sid=xxxxx肯定logout不在行尾。

相关内容