RewriteRule基于HTTP_REFERER重定向到子目录



我有一个问题,wordpress安装从/(根)移动到/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]
然而

…当我将文件保存在服务器的web浏览器中时,我得到了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,在第二种情况下)。

你得到一个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]

最新更新