【问题标题】:Embedding query parameters in Wordpress urls with Nginx使用 Nginx 在 Wordpress url 中嵌入查询参数
【发布时间】:2015-12-10 07:14:30
【问题描述】:

我正在扩展我们的 Wordpress 网站以呈现并非来自数据库的页面。我们希望这些页面有漂亮的 URL,URL 中没有参数。

假设我们在卖苹果:我希望 URL 是 http://myfictionalstore.com/apple/golden-delicioushttp://myfictionalstore.com/apple/granny-smith

我无法使用这种 URL 样式。

在底层,我们可以将 URL 传递给从 API 获取苹果相关信息的页面模板,因此我们可以愉快地呈现这样的页面:

http://myfictionalstore.com/apple/?apple=granny-smith

我已经告诉 WordPress 我的新查询变量:

function add_query_vars($aVars) {
$aVars[] = "apple";
 return $aVars;
}

add_filter('query_vars', 'add_query_vars');

在模板中,我可以愉快地使用它:

$apple_key = get_query_var( 'apple', 'rotten' ) ;

我不能做的是配置 Nginx 进行内部重定向,以便它可以呈现漂亮的 URL。即使它在上面工作,这个 Nginx 配置也不能:

location ~ /apple/([^/]+)/? {
    try_files /dev/null /index.php?pagename=apple&apple=$1;
}

当我尝试查询其中一个漂亮的 URL 时,该配置返回 404。我可以只使用 WordPress 查询变量进行查询:

http://myfictionalstore.com/index.php?pagename=apple&apple=orange-pippin

但无论出于何种原因,这都不能作为内部重定向。我可以使用phpinfo() 来证明参数正在进入 WordPress:

QUERY_STRING pagename=apple&apple=braeburn

也许:

  • WordPress 不喜欢请求环境?
  • Nginx 没有正确处理内部重定向?

墙上有凹痕,我的额头在流血。

更新:

感谢 Richard,这让它成功了:

  location ~ /apple/([^/]+)/? {
    fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /var/www/index.php;
    fastcgi_param REQUEST_URI     /index.php;
    fastcgi_param QUERY_STRING    page_id=12345&apple=$1&;
    fastcgi_pass_request_headers off;
  }

通过 Wordpress page_name 加载页面时出现问题,因此我最终稍微更改了查询;这是向前迈出的一步,然后删除原始请求标头使一切顺利。谢谢!

【问题讨论】:

    标签: php wordpress nginx


    【解决方案1】:

    这更像是一个建议而不是一个答案。 nginx 内部重定向不会重写 $request_uri,后者后来用于为 WordPress 设置 REQUEST_URI。 WordPress 可能会使用REQUEST_URI 而不是QUERY_STRING 以支持漂亮的永久链接

    显而易见的解决方案是让 WordPress 在内部处理您的漂亮的永久链接,但这对于您的具体实施可能不是一个实用的解决方案。

    另一种解决方案是将REQUEST_URI 的值更改为:

    fastcgi_param  REQUEST_URI $uri$is_args$args;
    

    以便它匹配您内部重写的值而不是外部呈现的值。这是一个全球性的变化,需要进行广泛的测试。

    如果您遇到问题,第三种解决方案是在您的新位置复制自定义 php 代码块。如:

    location ~ /apple/([^/]+)/? {
      fastcgi_param SCRIPT_FILENAME $document_root/index.php;
      fastcgi_param REQUEST_URI     /index.php?pagename=apple&apple=$1;
      fastcgi_pass ...;
      ...
    }
    

    【讨论】:

    • 谢谢!我需要的是朝着正确方向的颠簸和四分之二的重击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2017-04-02
    • 2012-09-07
    • 1970-01-01
    • 2021-12-05
    • 2014-07-22
    相关资源
    最近更新 更多