【问题标题】:How do I rewrite URLs with Nginx admin / Apache / Wordpress如何使用 Nginx admin / Apache / Wordpress 重写 URL
【发布时间】:2012-03-26 10:58:06
【问题描述】:

我的网址格式如下:

www.example.com/members/admin/projects/?projectid=41

我想将它们重写为以下格式:

www.example.com/avits/projectname/

项目名称在用户创建时不必是唯一的,因此我将检查现有名称并在项目名称末尾附加一个整数,如果已存在同名项目。例如example.project、example.project1、example.project2 等

我很高兴设置 GET 请求以按项目名称查询数据库,但是我在设置这些漂亮的 url 时遇到了很大的问题。

我正在使用安装了 Nginx Admin 的 Apache,这意味着所有静态内容都是通过 Nginx 提供的,而没有 apache 的开销。

对于我应该在我的 nginx.conf 文件中使用 nginx 重写规则还是在我的 .htaccess 文件中使用标准重写,我完全感到困惑。

为了进一步混淆问题,虽然这是一个相当大的自定义应用程序,但它构建在 wordpress 主干之上,以实现轻松的博客功能,这意味着我还可以使用内置的 wordpress 重写模块。

我已经尝试了所有三种方法,但绝对没有成功。我已经阅读了很多关于此事的内容,但似乎根本无法使任何工作。我确信这完全是由于对 URL 重写完全缺乏了解。再加上我不知道哪种类型的重写应该适用于我的情况,这意味着我只是在兜圈子。

谁能帮我解决这个问题并解释如何以上述方式重写我的网址?

非常感谢。

【问题讨论】:

    标签: apache wordpress url-rewriting nginx


    【解决方案1】:

    如果您将所有非静态文件请求代理到 Apache,请在此处进行重写 - 您无需在 nginx 上执行任何操作,因为它只会将请求传递到后端。

    您提议的问题在于它实际上不是重写,重写是获取第一个 URL 并只是更改它或将用户移动到另一个位置。

    您实际上需要从项目 ID 推断项目名称的逻辑。

    例如你可以重写:

    www.example.com/members/admin/projects/?projectid=41
    

    收件人:

    www.example.com/avits/41/
    

    相当容易,但您能否在应用代码中映射 /41/ 以将其更改为 /projectname/ - 因为 URL 重写无法做到这一点。

    【讨论】:

    • 感谢 Gareth,您所描述的逻辑实际上已经到位,不是问题。我正在苦苦挣扎的纯粹是重写本身。
    • 所以你想进行确切的重写吗?尝试这样的事情:所以你想在我的例子中进行上面的精确重写?做这样的事情:rewrite ^/members/admin/projects/?projectid=$ /avits/$1?/ last;
    猜你喜欢
    • 2011-12-10
    • 2015-10-29
    • 2014-05-29
    • 1970-01-01
    • 2011-10-13
    • 2015-12-20
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多