是否可以使用RedirectMatch有条件地重定向URL?

时间:2018-03-13 07:24:12

标签: .htaccess

我正在使用以下内容将旧网址结构中的所有网页重定向到新网页。

RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ https://sitename.com/$3

旧结构如下: http://sitename.com/2010/09/file-name/

新结构如下: https://sitename.com/file-name/

重定向工作正常。

我的问题是:是否可以将此重定向与条件一起使用?我想从此重定向中排除所有facebook机器人。

我尝试了以下操作,但它无效:

RewriteCond %{HTTP_USER_AGENT} !facebookexternalhit/[0-9] RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ https://sitename.com/$3

是否可以运行带有条件的RedirectMatch?如果没有,我有什么选择?

1 个答案:

答案 0 :(得分:0)

RedirectMatch为mod_alias RrwriteCond为mod_rewrite,因此您无法使用它。

仅使用mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_USER_AGENT} !facebookexternalhit/[0-9]
RewriteRule ^([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ https://sitename.com/$3 [R=301,L]

RewriteCond %{HTTPS} !=on条件仅匹配无https

注意:清除浏览器缓存,然后对其进行测试。

更新:

如果您想强制所有请求进入https并同时应用上述规则,请执行以下操作:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_USER_AGENT} !facebookexternalhit/[0-9]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_USER_AGENT} !facebookexternalhit/[0-9]
RewriteRule ^([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ /$3 [R=301,L]

再次:清除浏览器缓存,然后对其进行测试。