OpenShift.htaccess重写规则不';行不通

OpenShift.htaccess重写规则不';行不通,.htaccess,mod-rewrite,openshift,.htaccess,Mod Rewrite,Openshift,我有一个多用户wordpress安装,目前正在使用子域。我想将其迁移到使用子文件夹multiuser。我已经设置了多用户子文件夹,它实际上可以工作。现在,我想从旧地址重定向到新地址。例如: peter.example.com->example.com/peter 以上两个域都在OpenShift中正确添加为别名。为了引起重定向,我在.htaccess文件中创建了一个重写规则。看起来是这样的: RewriteCond %{HTTP_HOST} ^((?!www)[^.]+)\.example\.c

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

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>
HTTP/1.1 301永久移动
日期:2015年1月5日星期一03:30:58 GMT
服务器:Apache/2.2.15(红帽)
地点:http://peter.example.com/peter/
内容长度:335
内容类型:text/html;字符集=iso-8859-1
接受范围:无
301永久搬迁
永久移除
文档已移动


位于peter.example.com端口80的Apache/2.2.15(Red Hat)服务器
返回值是正确的,就像主体中的URL一样;所以我知道我的重写规则正在评估中。但是,位置标头中的URL不正确。为什么?在我看来,OpenShift似乎正在破坏这个头文件,导致重定向失败


这是OpenShift中的错误吗?按照我的规则?有人提出了解决方法吗?

我遇到了同样的问题,并且能够证明OpenShift重写了位置头。以下是我所做的和发现的:

  • 在test-app.rhcloud.com上设置应用程序
  • 已分配自定义域test.com
  • 创建了一个非常简单的PHP页面,发布了以下HTTP头

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

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

  • 我还没有找到解释,但似乎也有问题。我也不知道合适的解决方法,但您可以尝试使用HTML重定向(带有元标记)。谷歌对这种重定向的支持有限

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

    更新后的重写规则如下所示:

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

    我遇到了同样的问题,并且能够证明OpenShift重写了位置头。以下是我所做的和发现的:

  • 在test-app.rhcloud.com上设置应用程序
  • 已分配自定义域test.com
  • 创建了一个非常简单的PHP页面,发布了以下HTTP头

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

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

  • 我还没有找到解释,但似乎也有问题。我也不知道合适的解决方法,但您可以尝试使用HTML重定向(带有元标记)。谷歌对这种重定向的支持有限

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

    更新后的重写规则如下所示:

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

    端口:80已修复此问题。我不可能正确重定向,OpenShift也帮不上忙。正如其他人所说,任何地方都没有记录。

    端口:80的添加解决了这个问题。我不可能正确重定向,OpenShift也帮不上忙。正如其他人所说,任何地方都没有记录。

    请不要在答案中添加“谢谢”。在这个网站上投入一些时间,你会得到足够多的你喜欢的答案,这是Stack Overflow表达感谢的方式。我已经阅读Stack Overflow一段时间了,我或多或少知道它的正常行为。然而,由于我不能投赞成票,我不得不说声谢谢。我希望这不会打扰你。无论如何,谢谢你的提醒,我明白你的意思:-)请不要在答案中加上“谢谢”。在这个网站上投入一些时间,你会得到足够多的你喜欢的答案,这是Stack Overflow表达感谢的方式。我已经阅读Stack Overflow一段时间了,我或多或少知道它的正常行为。然而,由于我不能投赞成票,我不得不说声谢谢。我希望这不会打扰你。无论如何,谢谢你的提醒,我明白你的意思:-)经过一年左右的时间,我终于找到了解决办法。非常感谢你!大约一年后,我终于找到了解决办法。非常感谢你!