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。
我已经在我的根 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。