我正在努力解决重定向问题。我对此并不熟悉,我尝试了一个多星期来解决它,但我找不到答案,尽管谷歌搜索很多。
让我解释一下:客户刚刚要我创建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?
什么都行不通......我需要帮助!
也许试试这个:
Redirect 301 ^/index.php?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question
或者只是尝试完整的网址来调试,如果是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生成规则之前或之前。
这是我尝试的最后一种语法:
Redirect 301 ^/?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question
mod_alias Redirect
指令与查询字符串不匹配,因此永远不会匹配。而第二个论点不是正则表达式,所以^/?
无效。
要匹配查询字符串,您需要使用mod_rewrite(RewriteRule
和RewriteCond
指令)。既然你使用的是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
只是一个问题的占位符,那么你可以做一个更广泛的问题,如下所示:
# 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.fr
和new-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]