适用于Wordpress的Nginix路由

时间:2016-06-15 19:49:33

标签: wordpress nginx url-rewriting

我正试图让Nginx和Wordpress一起玩得很好。

我发现的大多数文档都讨论了如何为WP Multisite配置设置Nginx重写规则,但我正在尝试做一些稍微不同的事情,我希望从API加载数据并填充一个模板wordpress页面,但将url作为最后一个路径组件。

例如,我正在尝试使用这样的网址加载页面...

http://example.com/article/ {的段塞}

加载此页面时,我们希望重定向到位于此

固定链接的Wordpress页面

http://example.com/article

我们不想从现有的新闻网站加载任何帖子内容, 当任何匹配/ 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/中,我就会完全转到我希望重写的地方。

0 个答案:

没有答案