包含和排除regexp用于mod重写

时间:2017-03-01 18:06:59

标签: apache .htaccess mod-rewrite

我想通过mod-rewrite将访问重定向到我的某个网址,只有当请求没有我的网站作为引荐来源时,我才想要排除带参数的特定网址。

这是我今天的规则(适用于重定向):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{REQUEST_URI} .*profile/login*
    RewriteCond %{HTTP_REFERER} !^http(s)?://example.com(/)?.*$      [NC]
    RewriteCond %{HTTP_REFERER} ^$
    RewriteRule ^(.*)$ https://example.com/ [R=307,L]
</ifModule>

但我希望以下网址不被重定向:

https://example.com/profile/login/?my_param=my-param-value&key=XXXXXXX

我之前不知道查询字符串值,只知道查询字符串名称。

如何排除规则的网址?

谢谢,

此致

GV

1 个答案:

答案 0 :(得分:0)

我在.htaccess文件中使用以下条件来排除具有特定查询字符串参数和值的网址。

  

RewriteCond%{QUERY_STRING}!(^ |&amp;)rcp_action = lostpassword_reset($ |&amp;)

考虑到您的重写规则,我添加了一个新行来检查%{QUERY_STRING}条件,如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{REQUEST_URI} .*profile/login*
    RewriteCond %{HTTP_REFERER} !^http(s)?://example.com(/)?.*$      [NC]
    RewriteCond %{QUERY_STRING} !(^|&)rcp_action=lostpassword_reset($|&)
    RewriteCond %{HTTP_REFERER} ^$
    RewriteRule ^(.*)$ https://example.com/ [R=307,L]
</ifModule>

在您的情况下,您需要使用参数名称rcp_action替换my_param,并使用参数值lostpassword_reset替换my-param-value。< / p>

我已经在我自己的网站SlideModel中对此进行了测试,根据查询字符串参数,根据特定条件将用户重定向到维护页面。