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

强颜欢笑 提交于 2021-02-08 08:29:19

问题


I have got WordPress installed on my root example.com/ Website.

Also I have another Web application that on example.com/my-app/ which has got ugly links like example.com/my-app/file.php?arg=value to access.

How can I make my-app SEO friendly URI structure working as example below?:

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

Currently, if I access to example.com/my-app/value/ it redirects me to my WordPress post which contains some characters of the /value/. Why? Is there anyway to get this working?

My Nginx directives for domain are listed below:

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;
}

Any ideas? Should I use Ajax navigation, with switch cases? What about HTML5 pushState() API? Any working examples?

Thanks for help!


回答1:


Both WordPress and my-app work within a common document root which makes things simple.

The last element of the try_files directive is the default action for (for example) SEO friendly URLs.

You need a different default handler for URIs which begin with /my-app, which is achieved using a location /my-app block, for example:

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;
    ...
}

In the above case, arg is set to the value /my-app/value. If you really must extract the last part of the URI, add a named location with a rewrite, for example:

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;
    ...
}

Note that the fastcgi_read_timeout 300; (in your question) needs to be placed in the location ~ \.php$ block, or in one of the outer blocks, in order to be effective.

See this for details of the nginx directives used above.



来源:https://stackoverflow.com/questions/36273756/nginx-rewrite-rules-for-seo-friendly-url-structure-wordpress-and-another-web-a

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!