仅当存在查询参数时,Htaccess才会将旧链接重定向到新链接

时间:2014-08-01 09:20:04

标签: regex apache .htaccess mod-rewrite redirect

旧目录结构正在被替换为新目录结构,并且/ oldLms目录需要运行。但是,为了向后兼容,我们仍希望保持旧链接处于活动状态,但使用htaccess将它们重定向到新区域。我有可能在网站的根目录放置一个.htaccess。

以下是“旧”链接示例:

http://url.com/oldLms/index.php?auth_regen=1&modname=login&op=confirm&login_user=Hanna&time=1406883178&token=3dd7d9b37b5cc962aa16e9df4acc470a

和一个新的:

http://url.com/lms/index.php?r=site/sso&auth_regen=1&modname=login&op=confirm&login_user=Hanna&time=1406883178&token=3dd7d9b37b5cc962aa16e9df4acc470a

基本上不同之处在于旧的由

处理

/oldLms/index.php

而新的则由

处理

/lms/index.php?r=site/sso

重定向期间需要保留所有其他查询参数。

然而,有一个问题!我们只需要重定向具有auth_regen=1参数的链接。其他人不应该重定向。

2 个答案:

答案 0 :(得分:1)

您需要在root .htaccess中将以下规则作为您的第一条规则

RewriteEngine On

RewriteCond %{QUERY_STRING} (^|&)auth_regen=1(&|$) [NC]
RewriteRule ^oldLms/(index\.php)$ /lms/$1?r=site/sso [L,NC,QSA,R=302]

答案 1 :(得分:0)

您可以添加重写条件:

RewriteCond %{REQUEST_URI} ^/oldLms$
RewriteCond %{REQUEST_URI} auth_regen=1 # only if this occurs in the URI
RewriteRule /oldLms/.* /lms/$1