保留现有的301重定向以及通配符重定向

时间:2020-01-27 14:24:54

标签: .htaccess redirect

我已经手动将某些URL从domainA重定向到domainB,

Redirect /abc123 https://domainB.com/abc/?page_url=12

如果任何用户输入 domainA / abc123 ,他们将登陆 domainB.com/abc/?page_url=12 现在,我要实现这样的通配符重定向

RewriteCond %{HTTP_HOST} !domainB.in$ [NC]
RewriteRule ^(.*)$ https://domainB.in/something/?page_url=1&eid=$1 [L,R=301]

用户可以在domainA.com/STRING之后添加任何字符串,并将其传递到domainB.com/something/?eid=STRING

如何保持现有的手动重定向以及通配符重定向之间没有冲突?如果可以在htaccess中编写if-else条件,该如何实现?

1 个答案:

答案 0 :(得分:0)

Redirect是mod_alias指令,而RewriteRule是mod_rewrite指令。在请求期间,不同的Apache模块独立运行并在不同时间运行。尽管配置文件中指令的顺序明显,mod_rewrite将首先运行。您应该避免将来自两个模块的重定向混合到同一配置文件中,以免发生此类冲突。

将现有的Redirect指令转换为使用mod_rewrite,并确保最具体的重定向位于第一位。

例如:

RewriteEngine On

# Specific redirects
RewriteRule ^abc123$ https://domainB.com/abc/?page_url=12 [R=302,L]

# General redirect
RewriteCond %{HTTP_HOST} !domainB\.in [NC]
RewriteRule (.*) https://domainB.in/something/?page_url=1&eid=$1 [R=301,L]

请注意,您发布的Redirect指令(未明确声明状态码)将默认为302(临时)重定向。

但是,始终最好使用302(临时)重定向进行测试,以避免出现缓存问题。