繁体   English   中英

Nginx RewriteURL从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 from

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM