OpenShift .htaccess RewriteRule不起作用

时间:2015-01-05 03:40:25

标签: .htaccess mod-rewrite openshift

我有一个多用户wordpress安装,目前正在使用子域。我想将其迁移到使用子文件夹多用户。我已经设置了子文件夹多用户,它确实有效。现在,我想从旧地址重定向到新地址。例如:

  

peter.example.com - > example.com/peter

上述两个域都在OpenShift中正确添加为别名。为了引起重定向,我在.htaccess文件中创建了一个重写规则。它看起来像这样:

RewriteCond %{HTTP_HOST} ^((?!www)[^.]+)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/%1/$1 [R=301,L]

这会导致重定向循环。检查这一点,peter.example.com上的一个简单请求产生:

HTTP/1.1 301 Moved Permanently
Date: Mon, 05 Jan 2015 03:30:58 GMT
Server: Apache/2.2.15 (Red Hat)
Location: http://peter.example.com/peter/
Content-Length: 335
Content-Type: text/html; charset=iso-8859-1
Accept-Ranges: none

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://example.com/peter/">here</a>.</p>
<hr>
<address>Apache/2.2.15 (Red Hat) Server at peter.example.com Port 80</address>
</body></html>

返回值正确,正文中的URL也是如此;所以我知道我的RewriteRule正在评估中。但是,Location标头中的URL不正确。为什么?在我看来,好像OpenShift正在破坏此标头导致重定向失败。

这是OpenShift中的错误吗?在我的RewriteRule中?有没有人有建议的解决方法?

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,并且能够证明OpenShift重写了位置标题。这是我做过和发现的事情:

  1. test-app.rhcloud.com
  2. 设置应用
  3. 已分配自定义域 test.com
  4. 创建了一个非常简单的PHP页面,它发出了以下HTTP标头

    Location: http://www.example.com/
    
  5. 当我打开该页面时,会发送以下标题:

    Location: http://test-app.rhcloud.com/
    
  6. 如果我将重定向更改为任何其他域(例如www.example2.com),则可以正常工作(不会重写重定向)。

  7. 我还没有找到解释,但others似乎也遇到了问题。我也不知道正确的解决方法,但您可以尝试使用HTML重定向(使用元标记)。 Google has限制了对此类重定向的支持。

    更新:我找到了解决方案。只需在URL后附加默认端口号(80),OpenShift就不会重写您的URL。因为端口号是默认设置,浏览器会删除它,而您的用户甚至不会看到任何内容。

    这是您更新的重写规则的样子:

    RewriteCond %{HTTP_HOST} ^((?!www)[^.]+)\.example\.com$ [NC]
    RewriteRule ^(.*)$ http://example.com:80/%1/$1 [R=301,L]
    

答案 1 :(得分:0)

端口:80添加修复了问题。我不可能正确地重定向,OpenShift没有任何帮助。正如其他人所说的那样,任何地方都没有记录。