SEO 友好 URL 结构的 Nginx 重写规则 - WordPress 和另一个 Web 应用程序

Nginx rewrite rules for SEO friendly URL structure - WordPress and another Web application

我已经在我的根 example.com/ 网站上安装了 WordPress。

另外,我还有另一个 Web 应用程序,在示例中。com/my-app/ 有丑陋的链接,如示例。com/my-app/file.php?arg=要访问的值。

如何使我的应用 SEO 友好的 URI 结构像下面的示例一样工作?:

example.com/my-app/file.php?arg=value
to
example.com/my-app/value/

目前,如果我访问 example.com/my-app/value/,它会将我重定向到我的 WordPress post,其中包含 /value/ 的一些字符。为什么?有没有办法让这个工作?

我的域 Nginx 指令如下:

location / {
  try_files $uri $uri/ /index.php?$args;
  fastcgi_read_timeout 300;
}

location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

有什么想法吗?我应该使用带有开关盒的 Ajax 导航吗? HTML5 pushState() API 怎么样?有任何工作示例吗?

感谢帮助!

WordPress 和 my-app 都在一个共同的文档根目录下工作,这使事情变得简单。

try_files 指令的最后一个元素是(例如)SEO 友好 URL 的默认操作。

对于以 /my-app 开头的 URI,您需要一个不同的默认处理程序,这是使用 location /my-app 块实现的,例如:

location / {
    try_files $uri $uri/ /index.php?$args;
}
location /my-app {
    try_files $uri $uri/ /my-app/file.php?arg=$uri&$args;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}

在上述情况下,arg 设置为值 /my-app/value。如果您确实必须提取 URI 的最后一部分,请添加一个重写的命名位置,例如:

location / {
    try_files $uri $uri/ /index.php?$args;
}
location /my-app {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    rewrite ^/my-app/(.*)$ /my-app/file.php?arg=;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}

请注意,fastcgi_read_timeout 300;(在您的问题中)需要放置在 location ~ \.php$ 块中,或外部块之一中,才能有效。

有关上面使用的 nginx 指令的详细信息,请参阅 this