Nginx重写从example.com/script.php?param=value到example.com/value


Nginx rewriteurl from example.com/script.php?param=value to example.com/value

我有一个PHP脚本,它接受一个参数。

我的项目结构如下:

index.php
i.php
terms.php
functions
includes
icons
resources

我想重写它的URL的脚本是i.php

example.com/i.php?icon=id

example.com/id

同时确保其他所有内容都可以正常访问(例如example.com/terms.php)。

我该怎么做?

编辑这可能会有帮助。这是我以前在apache服务器上使用的。htaccess:

Options +FollowSymLinks  
RewriteEngine On  
RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  
RewriteRule ^('w+)$ ./i.php?icon=$1

你要找的是,

if ($query_string ~ .*=(.*)){ 
    return 301 $scheme://site.com/$1;
} 

但没那么简单。这将用查询字符串和等号(不仅仅是i.php)将任何 URL重定向到site.com/everything_after_the_equal_sign。如果你只希望这适用于i.php,你需要为它创建一个位置块,例如

location /i.php/ {
    if ($query_string ~ .*=(.*)){ 
    return 301 $scheme://site.com/$1;
}

如果你有一个像这样的位置块,那么这个If语句需要添加。如果所有PHP内容都来自通用位置块,如

location ~ '.php$ {
    #your config here
}

则需要在泛型块上方特别添加/i.php/

最重要的是:

如果是邪恶的(见这里)。如果你在location块中有if语句,这将适用于你。如果可以,尝试重写代码以在内部执行这些重定向。否则,如文档中所述,if有时是不可避免的。

我已经得到它的工作通过使用这个:

location / {
    try_files $uri $uri/ /i.php?icon=$uri;
}