【问题标题】:Rewrite all params requests to index.php with Nginx使用 Nginx 重写所有对 index.php 的参数请求
【发布时间】:2016-06-22 18:41:22
【问题描述】:

我有这样的网址 http://www.example.com/index.php?page=profile&id=324&opt=edit&cat=23&...

我希望我有 http://www.example.com/profile/324/edit/23...

看了几个关于如何删除php扩展的教程,但不知道如何传递其他参数

谢谢大家

更新

用 PHP 解决方案解决。

nginx:

location / { 
try_files $uri $uri/ /index.php; 
} 

PHP:

$params = explode("/",$_SERVER['REQUEST_URI']); 

并使用它们

【问题讨论】:

    标签: nginx url-rewriting


    【解决方案1】:

    实际上,如果这些参数的顺序始终与您的示例相同,这很容易。

    在你的 nginx 配置中添加一个重写规则。

    rewrite ^/index.php?page=(.*)&id=(.*)&opt=(.*)&cat=(.*)(&.*)$ /$1/$2/$3/$4

    但是如果每个请求中参数的顺序发生变化,我们可能需要另一种解决方案。

    更新 nginx 将请求参数存储在 $arg_name 等变量中,如果实际请求参数名称,则 $arg_ 后面的名称。所以你只需要用尾随问号重写对 index.php 的请求到你想要的 url 样式。

    rewrite ^/index.php? /$arg_page/$arg_id/$arg_opt/$arg_cat;

    【讨论】:

    • 感谢您的回复不幸的是订单和参数可能会在每个请求中更改
    • @Arkantolo 您的 index.php 中有什么?使用 PHP 可以更轻松地完成它。我认为没有原生的 nginx 解决方案,除非你使用像 nginx_lua_module 这样的模块。但这会更复杂。
    • @Arkantolo 可能有原生 nginx 解决方案,我会先在我的网站上测试。
    • @Arkantolo 使用rewrite ^/index.php? /$arg_page/$arg_id/$arg_opt/$arg_cat;,我在我的服务器上测试过,这可以工作。
    • 用 PHP 解决方案解决。 nginx: 位置 / { try_files $uri $uri/ /index.php; PHP: $params = explode("/",$_SERVER['REQUEST_URI']);并使用它们
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2014-01-03
    • 2016-07-13
    • 1970-01-01
    • 2021-05-08
    • 2012-12-09
    • 2016-12-18
    相关资源
    最近更新 更多