使用正则表达式将 301 重定向到具有不同编号的新 url

问题描述

我移动了我的系统论坛,我需要一些重定向。我很难重定向这个网址。

<MyCustomLayout>
    <LinearLayout android:orientation="vertical"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:background="@xml/shape_corner">
        </LinearLayout>
</MyCustomLayout>
        <ImageView android:layout_width="18dp"
                   android:layout_height="13dp"
                   android:rotation="180"
                   android:layout_centerInParent="true"
                   android:layout_gravity="center_horizontal"
                   android:background="@xml/triangle"/>

您可以查看此更改:

  1. 旧名文章前面有一个数字:number-name
  2. 名称文章相同,但末尾有其他数字和字母“r”:name-rnumber

添加新数据 重定向 URL 示例:

原始网址: https://www.website.com/folder/2087-name-of-the-article

来源网址 https://www.website.com/folder/name-of-the-article-r929/

解决方法

第一个解决方案(通用解决方案,它不检查 url 是否从文件夹 1 开始):根据您显示的示例,您能否尝试以下操作。请确保在测试您的网址之前清除浏览器缓存。

RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/([\w-]+)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/%1/%8-r%7%6%5%4%3%2 [R=301,L]

或不使用 RewriteCond:

RewriteEngine ON
RewriteRule ^([\w-]+)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$ http://%{HTTP_HOST}/$1/$8-r$7$6$5$4$3$2 [R=301,L]

当我使用链接 http://localhost/folder1/123456-name-of-article 测试上述规则时,它在后端重写为 http://localhost/folder1/name-of-article-r654321



第二种解决方案(检查 uri 从文件夹 1 开始的地方): 以上规则是通用规则,以防您想检查 URI 是否专门从 {{1}然后尝试遵循以下规则,确保一次以上或以下规则仅在您的 .htaccess 文件中。

folder1

OR 在仅单个 RewriteRule 中没有 RewriteCond 尝试:

RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/(folder1)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/%1/%8-r%7%6%5%4%3%2 [R=301,L]