htaccess RewriteRule正则表达式

时间:2018-01-08 19:00:50

标签: regex .htaccess redirect

我需要重定向数百个旧链接。

以下是一个例子:

/index.php?option=com_content&view=article&id=433:seventh-character-code-categories-and-icd-10-cm&Itemid=101&showall=1

/第七字符码类别和 - ICD-10厘米

基本上我需要删除/index.php?option=com_content&view=article&id=433:part。

我试过这个,但是我对[0-9]和:部分感到困惑,所以以下内容不起作用:

RewriteRule ^ / index.php?option = com_content& view = article& id = [0-9] :(。*)$ / $ 1 [L,R = 301]

2 个答案:

答案 0 :(得分:1)

假设您要在{1}}之后的:之前从您提到的查询字符串中捕获,请尝试使用此表达式:

&

正如@starkeen在评论中提到的那样,你必须检查查询字符串。这可以使用^[^\:]*\:([^\&]*)\&.*$

完成

因此,如果RewriteCond %{QUERY_STRING}位于根文件夹中:

index.php

这是另一个例子。这个用于子文件夹:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^\/index\.php$
RewriteCond %{QUERY_STRING} ^[^\:]*\:([^\&]*)\&.*$
RewriteRule ^(.*)$ http://example.com/%1 [R=301,L]

另外,请注意网址RewriteEngine On RewriteCond %{REQUEST_URI} ^\/pages\/index\.php$ RewriteCond %{QUERY_STRING} ^[^\:]*\:([^\&]*)\&.*$ RewriteRule ^(.*)$ /pages/%1? [R=301,L] 末尾的?,这可以防止重新附加查询字符串。

另一件事是,自RewriteCond中设置以来,捕获的组将被设置为变量/pages/%1?

BTW,根据您的服务器配置,您可能需要添加NE标记,如%{number} Plus测试是否需要双重转义文字字符。

答案 1 :(得分:0)

什么是直接方法。全部直到分号,马赫串直到&并用第一个替换所有

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} [^:]+:([\w-]+[^&]).*
    RewriteRule .*$ \/%1?  [R=301,L]  

</IfModule>