【发布时间】:2015-12-10 07:14:30
【问题描述】:
我正在扩展我们的 Wordpress 网站以呈现并非来自数据库的页面。我们希望这些页面有漂亮的 URL,URL 中没有参数。
假设我们在卖苹果:我希望 URL 是 http://myfictionalstore.com/apple/golden-delicious 或 http://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 加载页面时出现问题,因此我最终稍微更改了查询;这是向前迈出的一步,然后删除原始请求标头使一切顺利。谢谢!
【问题讨论】: