前端集合 - 关注前端技术和互联网免费资源

关注前端技术和互联网免费资源

分类儿

页面儿

搜索儿

前端集合 RSS订阅
Home » 经验记录 » Typecho或WordPress Nginx伪静态规则如何设置,才能达到访问 abc.com/123/ 跳转到 abc.com/123.html 的效果?

Typecho或WordPress Nginx伪静态规则如何设置,才能达到访问 abc.com/123/ 跳转到 abc.com/123.html 的效果?

发布者:前端集合 // 发布时间:2019-01-15 07:53:00 // 分类:经验记录 // 访问: 571 次 // 热度:

跟着大众 学会如何精致生活精品中的极品 只为性价比而生

最近,把VPS面板升级为宝塔后,遇到了很多问题。一一记录下,以供遇到同样问题的人参考。

问题描述

今天这个问题就是:

使用wdcp时,因为wdcp支持apache的htaccess 和 nginx 伪静态,所以一些伪静态规则很好设置,网上随便一搜就找到了。
但是宝塔只支持通过nginx来设置伪静态。那么就需要将之前apache的htaccess转为nginx伪静态规则。

在网上找了好久的文章,试来试去,都没有结果。

解决过程

后来无意中试了下宝塔后台给网站设置伪静态时,旁边有一个工具提示:Apache转Nginx。进去一试,把转换的结果放进宝塔面板,还是没有任何效果。

我的原始apache htaccess代码时这样的:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.geek100.com [NC]
RewriteRule ^(.*)$ https://geek100.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
RedirectMatch 301 ^/(\d+)$ /$1.html
RedirectMatch 301 ^/(\d+)/$ /$1.html
</IfModule>

通过宝塔官方的工具转换成了这样:

if ($http_host ~* "^www.geek100.com"){
    set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
    rewrite ^/(.*)$ https://geek100.com/$1 permanent;
}
if (!-f $request_filename){
    set $rule_1 1$rule_1;
}
if (!-d $request_filename){
    set $rule_1 2$rule_1;
}
if ($rule_1 = "21"){
    rewrite ^/(.*)$ /index.php/$1 last;
}

试了,还是不行。

后来又发现宝塔官方这个工具也是参考外国友人写的一个工具(htaccess to nginx converter)来的。于是我直接去外国友人这个工具转换了一下,好家伙,怎么转换出来的结果和宝塔官方的工具差别这么大:

# nginx configuration

location ~ ^/(\d+)$ {
  rewrite ^(.*)$ /$1.html redirect;
}

location ~ ^/(\d+)/$ {
  rewrite ^(.*)$ /$1.html redirect;
}

location / {
  if ($http_host ~* "^www.geek100.com"){
    rewrite ^(.*)$ https://geek100.com/$1 redirect;
  }
  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php/$1 break;
  }
}

结果

最后我稍微修改了下,以便适应宝塔后台的要求,如下图:

Typecho或WordPress Nginx伪静态规则如何设置,才能达到访问 abc.com/123/ 跳转到 abc.com/123.html 的效果?

Ok,大功告成,满足了我以下2点需求:

Tags: Wordpress, Typecho, 宝塔, typecho 宝塔伪静态设置, wordpress 宝塔伪静态设置, 宝塔301跳转伪静态设置

宝塔中升级php 7.2后Typecho出现Adapter Typecho_Db_Adapter_Mysql is not available>>  << 宝塔面板开启 Memcached 和 Opcache 简明指南
Top