使用变体异常向http发送http

时间:2017-04-05 21:36:17

标签: apache .htaccess https url-redirection http-redirect

我们的网站很快就会转为SSL,但我们还没准备好。因此,我们将在htaccess中将所有https URL重定向到http。我有这个工作,但作为一个额外的复杂性,我们有一些必须是重定向的例外的URL。这些网址是: @model TestMVC.ViewModels.MediaViewModel @foreach (var item in Model.Foo) { <p>@item.title</p> <p>@item.ImagePath</p> <p>@item.body</p> <p>@item.description</p> } somebody.dev.www.example.com example.com/top_deal

我的重定向工作如下: example.com/watches

但无法使例外工作。我在网上找到了我能找到的所有解决方案。

3 个答案:

答案 0 :(得分:0)

首先,您希望它是临时重写(= 302)还是浏览器应将其保存为<div class="table-responsive"> <table> ..... </table> </div> 因此得到permanent?只是询问,两者都有效,但如果你想要暂时的,你应该阅读this

301

因此,在您的情况下, Excerpt: HTTP/1.1 (RFC 2616) added the new status codes 303 and 307可能会更好。

如果您想要进行永久性重写,请使用307使浏览器缓存重写目标,而不是每次都重写。

现在转到错误解决方案(但我留下了良好的原因,请参阅here) - DON&#39; T用那个!!!

[R=301]

<强>更新

这是真正应该放入配置的内容:

#logic is: 1 OR (2 AND 3) --> NO, it isn't, see the link right above!
#1 being hostname: somebody.dev.www.example.com
#2 being hostname: example.com
#3 being REQUEST_URI = !^/(top_deal|watches)
RewriteCond %{HTTP_HOST} ^somebody.dev.www.example.com$ [OR]
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{REQUEST_URI} !^/(top_deal|watches)$
RewriteRule .? - [END]
##[END] makes the rewrite-evaluation STOP, completely, not only for this turn!

#same rule as before, just changed 302 -> 307 (RFC 2616) and ^(.*)$ to .? cuz I like it better^^
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule .? http://%{HTTP_HOST}%{REQUEST_URI} [L,R=307]

那绝对应该做的工作:)

如果由于某种原因没有,请搜索您的# Don't rewrite HOST 'somebody.dev.www.example.com' RewriteCond %{HTTP_HOST} ^somebody.dev.www.example.com$ RewriteRule ^ - [END] # Don't rewrite HOST 'example.com', if URI 'top_deal' OR 'watches' RewriteCond %{HTTP_HOST} ^example.com$ RewriteCond %{REQUEST_URI} ^/(top_deal|watches)$ RewriteRule ^ - [END] RewriteCond %{HTTPS} on RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=307] 并将LogLevel添加到该行。因此,如果您的rewrite:traceXLogLevel,则应该如下所示:

error

然后重新启动/重新加载服务器并再次测试。 Error.log现在将显示尝试重写的结果。使用LogLevel error rewrite:trace2 查找它们。如果不清楚,请告诉我们,也许我们可以提供帮助:)

答案 1 :(得分:0)

您可以使用规则作为第一条规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} !=somebody.dev.www.example.com
RewriteCond %{THE_REQUEST} !\s/+(?:top_deal|watches)/?[?\s] [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

# rest of your rules go here

确保在测试前清除浏览器缓存。

答案 2 :(得分:0)

我最终做的最终工作如下:

RewriteCond %{HTTP_HOST} !^(.*).dev.www.example.com
RewriteCond %{REQUEST_FILENAME} ! top_deal(.*)
RewriteCond %{REQUEST_FILENAME} ! watches(.*)
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule .? http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]