我有一个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;
}