htaccess重定向在我的wordpress上不起作用

时间:2018-08-30 11:54:58

标签: wordpress .htaccess redirect query-string

我正遇到重定向问题。我对此并不熟悉,我花了一个多星期的时间来解决它,但是尽管有很多Google搜索,但是我找不到答案。

让我解释一下: 一位客户刚问我创建3个新网站,并保留原始网站的内容(他想将原始网站拆分为3个新网站)。 他们都使用WordPress。

现在三个域都已准备就绪,我必须使用.htaccess将原始网站的所有页面重定向到新的网站页面。

示例:

在原始网站上,我有一个名为“ FAQ”的自定义帖子类型,其URL如下所示:

https://old-site.fr/?faqs=name-of-my-question/

,我希望它重定向到:

https://faq.new-site.com/name-of-my-question/

我尝试了301重定向,但无济于事。

这是我尝试的最后一种语法:

Redirect 301 ^/?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

这是完整的.htaccess代码:

# BEGIN WordPress
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Redirect 301 ^/index.php?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

</IfModule>

# END WordPress

什么都没有...我如何检查是否启用了mod_rewrite?

什么都没有...我需要帮助!

2 个答案:

答案 0 :(得分:0)

也许尝试一下:

Redirect 301 ^/index.php?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

或者尝试尝试使用完整的URL进行调试,例如是否是mod_rewrite问题。

Redirect 301 https://old-site.fr/?faqs=name-of-my-question/ https://faq.new-site.com/name-of-my-question

还要检查RewriteEngine On和规则是否在WordPress生成的规则之后或之前。

答案 1 :(得分:0)

  

这是我尝试的最后一种语法:

Redirect 301 ^/?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

mod_alias Redirect指令与查询字符串不匹配,因此将永远不匹配。第二个参数不是正则表达式,因此^/?无效。

要匹配查询字符串,您需要使用mod_rewrite(RewriteRuleRewriteCond伪指令)。由于您使用的是WordPress,它具有自己的mod_rewrite指令,因此您还必须使用mod_rewrite。 (不建议同时使用mod_alias和mod_rewrite的重定向混合,因为这样可能会导致意外冲突。)

添加到.htaccess的任何重定向都必须在现有WordPress指令之前执行。即。在# BEGIN WordPress部分之前。

请尝试以下类似方法:

# REDIRECT: https://old-site.fr/?faqs=name-of-my-question/
#       TO: https://faq.new-site.com/name-of-my-question/
RewriteCond %{HTTP_HOST} ^old-site\.fr [NC]
RewriteCond %{QUERY_STRING} ^faqs=name-of-my-question/
RewriteRule ^$ https://faq.new-site.com/name-of-my-question/ [R=302,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
:

如果name-of-my-question只是 any 问题的占位符,那么您可以执行更通用的 any问题,如下所示:

# REDIRECT: https://old-site.fr/?faqs=<any-question>/
#       TO: https://faq.new-site.com/<any-question>/
RewriteCond %{HTTP_HOST} ^old-site\.fr [NC]
RewriteCond %{QUERY_STRING} ^faqs=([a-z-]+)/
RewriteRule ^$ https://faq.new-site.com/%1/ [R=302,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
:

如果old-site.frnew-site.com驻留在不同的服务器上,则可以删除检查HTTP_HOST的初始条件。

第二个%1替换中的RewriteRule后向引用 从查询字符串中捕获<name-of-my-question>

请注意,这些是302(临时)重定向。一旦测试它可以正常工作(避免缓存问题),请仅将其更改为301(永久)-如果确实打算将其永久保存。


更新:

  

...没有用。

尝试将RewriteRule 模式^$更改为^(index\.php)?$。换句话说:

RewriteRule ^(index\.php)?$ https://faq.new-site.com/name-of-my-question/ [R=302,L]