我正遇到重定向问题。我对此并不熟悉,我花了一个多星期的时间来解决它,但是尽管有很多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?
什么都没有...我需要帮助!
答案 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(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
只是 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.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]