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

时间:2016-03-29 01:10:03

标签: php html wordpress nginx rewrite

我的root example.com/网站上安装了WordPress。

另外,我在example.com/my-app/上有另一个Web应用程序,它有像example.com/my-app/file.php?arg=value这样的丑陋链接来访问。

如何使我的应用程序SEO友好URI结构作为例子如下工作?:

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

目前,如果我访问example.com/my-app/value/,它会将我重定向到我的WordPress帖子,其中包含/ 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怎么样?有什么实际的例子吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

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=$1;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}

请注意,fastcgi_read_timeout 300;(在你的问题中)需要放在location ~ \.php$块中,或放在其中一个外块中,以便有效。

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