我需要重定向数百个旧链接。
以下是一个例子:
/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]
答案 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>