如果包含特定名称,则重写nginx

时间:2014-08-19 14:28:22

标签: nginx rewrite

我想将包含'xhr.php'的所有请求重写为/xhr.php而不是原始路径。

请求:

type: "POST",
url: "/system/classes/templates/address/xhr.getAddress.php",
data: vars,
dataType: "html"

应该以路径作为参数转到 /xhr.php 。我试过这个:

 rewrite ^/(.*)/xhr.(.*)\.php$ /xhr.php?parameter=$1&parameter2=$2 last;

然而它不起作用。有任何想法吗?我的配置看起来像这样:

location / {
    root  /var/www/http;
    try_files $uri $uri/ index.php /index.php$is_args$args @rewrite;
}

location @rewrite {
    rewrite ^/(.*)/xhr.(.*)\.php$ /xhr.php?parameter=$1&parameter2=$2 last;
}

这基本上可以用nginx吗?这里有什么不对? 谢谢:))

//编辑: 我解决了它,但它看起来效率不高......

location / {
  root  /var/www/http;
  try_files $uri $uri/ index.php /index.php$is_args$args;
}

if ($request_uri ~ .*/xhr.*) {
   rewrite ^/(.*)/xhr.(.*)\.php$ /xhr.php?parameter=$1&parameter2=$2 break;
}

1 个答案:

答案 0 :(得分:2)

您可以删除if并在同一级别的位置重写。通过这种方式,您将为每个请求保存一个正则表达式(if中的一个)。

实际上我认为你也可以删除location /

root /var/www/http;
rewrite ^/(.*)/xhr.(.*)\.php$ /xhr.php?parameter=$1&parameter2=$2 break;
try_files $uri $uri/ index.php /index.php$is_args$args;