我遇到一个问题,其中wordpress安装从/
(root)移动到/beta/
(子目录)。我有很好的工作,除了有一些链接到的页面链接,例如,/my-page
现在是404,我希望它重定向到/beta/my-page
。 /beta/(.*)
路径上的这些链接存在,因此我的想法是在主根路径中生成.htaccess
规则,该路径会看到链接来自/beta/*
和只需将用户重定向回正确的页面即可。这就是我到目前为止所做的:
RewriteEngine On
# `HTTP_REFERER` contains my beta path...
RewriteCond %{HTTP_REFERER} /march\-beta
# The current page is not *already* a `/march-beta` page (don't want an infinite redirect)
RewriteCond %{REQUEST_URI} !/march\-beta
# Remap the entire path to be in the correct subdirectory
RewriteRule ^(.*)$ /march-beta$1 [R=302, L]
然而......当我将文件保存在服务器的webroot中时,我收到了500服务器配置错误的错误。
一个例子:
如果用户在/march-beta/t-shirts
并点击链接到/blue-t-shirts
(或甚至/t-shirts/blue-ones
)的链接
我希望.htaccess
文件看到HTTP_REFERER
包含/march-beta
,并立即R=302
他们到/march-beta/blue-t-shirts
(或/march-beta/t-shirts/blue-ones
,第二种情况)。
答案 0 :(得分:1)
您收到500服务器错误,因为您的重写标记之间有空格。这个空格让mod_rewrite认为标志是[R=302,
,并且可怕地混淆mod_rewrite并抛出错误。尝试删除空格:
RewriteRule ^(.*)$ /march-beta$1 [R=302,L]
此外,您可能希望在/march-beta
之后使用斜杠,因为在htaccess文件中重写规则的URI会删除前导斜杠:
RewriteRule ^(.*)$ /march-beta/$1 [R=302,L]