我正试图让Nginx和Wordpress一起玩得很好。
我发现的大多数文档都讨论了如何为WP Multisite配置设置Nginx重写规则,但我正在尝试做一些稍微不同的事情,我希望从API加载数据并填充一个模板wordpress页面,但将url作为最后一个路径组件。
例如,我正在尝试使用这样的网址加载页面...
http://example.com/article/ {的段塞}
加载此页面时,我们希望重定向到位于此
固定链接的Wordpress页面我们不想从现有的新闻网站加载任何帖子内容, 当任何匹配/ article / {slug}的url匹配时,我们总是会转到此页面,并传递场景后面的slug参数。
我们在主题的functions.php中有一个WP Rewrite规则
/**
* Intercept the articles request
* @return void
*/
function custom_rewrite_rule() {
add_rewrite_rule('^article/([^/]*)/?','index.php/article?slug=match[1]','top');
}
add_action('init', 'custom_rewrite_rule’);
在Apache中运行时,在.htaccess文件中指定以下规则时,一切都与预期完全一致。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^^article/([^/]*)/? /index.php/article?slug=match[1] [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
但是我试图将其转换为在Nginx上运行但没有成功。 我用于location指令的一些变体是
location / {
rewrite ^/^article/([^/]*) /index.php/article/?slug=match[1];
try_files $uri $uri/ /index.php$query_string;
}
并且
location / {
try_files $uri $uri/ ^article/([^/]*)/? /index.php/article?slug=match[1];
try_files $uri $uri/ /index.php$query_string;
}
甚至将这些组合在一起。
location /article {
try_files $uri $uri/ ^article/([^/]*)/? /index.php/article?slug=match[1];
}
location / {
try_files $uri $uri/ /index.php$query_string;
}
但我真的很难理解实际的语法 任何建议都将不胜感激。
感谢。
更新 我一直在Nginx中记录重写,那里的东西看起来就像他们应该做的那样
2016/06/16 02:56:52 [notice] 12879#12879: *1 "^/article/(.+)" matches "/article/test-article", client: 192.168.10.1, server: example.com, request: "GET /article/test-article HTTP/1.1", host: "example.com"
2016/06/16 02:56:52 [notice] 12879#12879: *1 rewritten data: "/index.php/article", args: "", client: 192.168.10.1, server: example.com, request: "GET /article/test-article HTTP/1.1", host: "example.com"
如果我将此网址放在浏览器http://example.com/index.php/article/中,我就会完全转到我希望重写的地方。