nginx将所有带有查询字符串/参数的URI请求重定向到等效项

时间:2015-11-11 00:59:31

标签: nginx url-rewriting rewrite

我正在阅读通过重定向(例如$1?$argument$1)从所有请求中删除查询字符串/参数。

我尝试了文档在添加?到所需重写结尾时所说的内容,以便删除查询字符串和参数,但这没有效果。

我希望维护当前的功能,并从所有URI请求中删除查询字符串/参数。

与文档附加?的建议有什么冲突,或者对此有什么正确的解决方案?

# for removing .php from all requests
location / {
try_files $uri $uri/ @extensionless-php;
}

# rewrite to remove .php
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}

# deny access to php includes
location ~* /includes/(.+)\.php$ {
deny all;
}

# redirect all instances of index.php to / in its respective directory (for example, /index.php to /, and /articles/index.php to /articles/)
location ~* \.php {
try_files $uri =404;
if ($request_uri ~ ^/([^?]*?)(?:(?<=/)index(?:\.php)?|\.php)(\?.*)?$) { return 301 /$1$2; }
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

1 个答案:

答案 0 :(得分:0)

我看到您正在使用nginx php friendly URL redirection without interfering with index.php causing /index中的解决方案! : - )

如果您还要删除整个$args / $query_string,除了删除index.php之外,请忽略$2从提供的解决方案;此外,您还可以使用额外的if条件从其他网址中删除args。

index index.php;
if ($request_uri ~ ^/([^?]*?)(?:(?<=/)index(?:\.php)?|\.php)(\?.*)?$) { return 301 /$1; }
if ($request_uri ~ ^/([^?]*)\?) {   return 301 /$1; }