首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当https站点的url子目录在http上显式指定时,Apache重写中断。

当https站点的url子目录在http上显式指定时,Apache重写中断。
EN

Server Fault用户
提问于 2019-09-14 07:44:08
回答 2查看 750关注 0票数 0

我一直在为一个愚蠢的问题而挣扎,我相信有人已经问过这个问题,但我无法在这里或其他地方找到正确的答复。所以我来了。我已经将我的.htaccess文件设置为将所有http请求重定向到https。重写也是启用的。但是,当我用http指定一个段时,站点重定向到https://example.com/index.php似乎一切正常。例如:

代码语言:javascript
运行
AI代码解释
复制
example.com -> redirects correctly to https://example.com
http://example.com -> redirects correctly
example.com/subdirectory -> redirects to https://example.com/index.php
http://example.com/subdirectory -> redirects to https://example.com/index.php
https://example.com/subdirectory -> redirects correctly

如果我在加载https://exmaple.com之后使用导航链接,那么一切都很好。

我的重写和重定向规则如下:

代码语言:javascript
运行
AI代码解释
复制
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} (.+)/$    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ %1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

我做错了什么?感谢您的时间,并感谢您的帮助。抱歉,如果这是一个重复,并将赞赏推动一个正确的方向。谢谢。

EN

回答 2

Server Fault用户

发布于 2019-09-14 16:17:16

让我们仔细研究一下:

  • 您的第一条规则本质上设置了HTTP:授权,这对于您的设置来说是很奇怪的,但不是unusual...importantly,没有[L]
  • 第二条规则是,当以/结尾但不是目录的REQUEST_URI只获取该文件。如果匹配的话,你从外部重定向,我们回到第一条规则--当我们第二次遇到这个规则时,我们应该通过它。
  • 第三条规则是,如果请求不是一个文件,并且请求不是一个目录,那么在内部,路径应该转到index.php,其他规则也不应该匹配任何其他规则。
  • 最后,您的规则捕获所有http://并将外部重定向到https://,在此过程中丢失查询字符串。

我不太明白发生了什么,为什么失败了,但把最后一条规则作为第一条规则应该能解决它。

您还可以考虑切换REQUEST_URI,因为在路径之后会丢失任何查询字符串。相反,将最后一行改为:

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

这确保:

  • 没有正斜杠的http://example.com转到https://example.com
  • .重复0次或多次(*)后的任何字符(D20)都放在第1组中。
  • $1用HTTPS协议添加到URL的末尾
票数 1
EN

Server Fault用户

发布于 2019-09-14 19:00:59

由于我不明白的原因,将http移到https重定向对我很有帮助。所以我的档案现在看起来像这样。

代码语言:javascript
运行
AI代码解释
复制
RewriteEngine On
#Redirect from http to https
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
#as @LTPCGO suggested, I think I will change the above line to the one below. but i've included to show that it works for now.
#RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

但是,我注意到,如果我在url中指定了index.php (例如,https://example.com/index.php/subdirectory ),则不会删除index.php。因此,我遵循@Frédéric的回答(Symfony 2's的做法),在这里找到了https://stackoverflow.com/questions/9608366/remove-index-php-from-url-with-htaccess。所以我现在的规矩是这样的,

代码语言:javascript
运行
AI代码解释
复制
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]

# Sets the HTTP_AUTHORIZATION header removed by apache
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

RewriteRule .? %{ENV:BASE}/index.php [L]

谢谢你@LTPCGO的回复,非常感谢。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/984238

复制
相关文章
绕过CDN找到源站的思路
网上有很多绕过CDN的思路,但是存在很多问题,以下是收集并总结的思路。 站在站长的角度,不可能每个站都会用上CDN。 站在DNS服务商的角度,历史解析记录可能不受CDN服务商控制。 站在CDN服务商的角度,提供CDN服务的区域有限制,CDN流量有限制。
HACK学习
2019/08/06
1.8K0
MyBatisPlus注入公共Sql问题
转载自 https://blog.csdn.net/synsdeng/article/details/78354462
allsmallpig
2021/02/25
1.1K0
python找到多个字典中的公共键
python找到多个字典中的公共键 生成字典 from random import randint,sample s = 'abcdefg' s1 = {x:randint(1,4) for x in sample(s,randint(3,6))} s2 = {x:randint(1,4) for x in sample(s,randint(3,6))} s3 = {x:randint(1,4) for x in sample(s,randint(3,6))} 方案1:循环判断 res = [] fo
听城
2018/04/27
4.1K0
SpringMVC 参数注入
写一个web service, 总是400. 说是request有问题,server不识别。然而检查了很多次都没问题。最终问题指向spring对参数的解析和注入。 一个controller中可以自定义参数,只要参数和request的参数匹配就会自动注入。针对自定义POJO,显然是spring帮忙给new了一个新的,然后把参数扔进去。 测试发现,不是setter方法的问题。 最后,发现自己在POJO中添加了个构造函数但却么有声明无参构造函数,这样导致spring无法调用无参构造函数,于是bad request
Ryan-Miao
2018/03/13
8280
CA1062:验证公共方法的参数
外部可见方法取消引用其中一个引用参数,而不验证该参数是否 null(Visual Basic 中 Nothing)。
呆呆
2022/01/10
7310
jsdelivr静态公共库已开始DNS污染- 星泽V社
JSDelivr是一种特殊的CDN。 它旨在让用户下载npm和Github上托管JavaScript库,jsDelivr是一个开源的网站,提供免费的cdn加速加载资源。
星泽V社
2022/05/01
1.1K0
jsdelivr静态公共库已开始DNS污染- 星泽V社
SQL 注入类型详解
笔者最初学习 SQL 注入时,大家对于 SQL 注入类型的归类让我头脑一片混乱,后来笔者发现其实大家都是根据 sqlmap 上给出的“类型”来划分的。所以,今天在这里,笔者根据自己所学所知来对 SQL 注入进行一个分类,以及讲解一些在注入时十分重要而有用的知识,相信对初学者十分有用。
信安之路
2018/08/08
3.3K0
SQL 注入类型详解
Actframework依赖注入 II - 注入对象类型
1. 框架内置绑定 在ActFramework中有大量的服务和组件都可以直接使用依赖注入,其中包括 ActionContext - Encapsulate all data/info relevant to an HTTP request context H.Session - HTTP request session. Also available via actionContext.session() H.Flash - HTTP request flash. Also available via ac
老码农
2018/06/27
3140
1.2.2-SQL注入-SQL注入语法类型-报错注入
构造payload让信息通过错误提示回显出来 应用场景: 查询不回显内容,会打印错误信息 Update、insert等语句,会打印错误信息
tea9
2022/07/16
1.6K0
1.2.2-SQL注入-SQL注入语法类型-报错注入
30个免费且很棒的公共数据源分享
机器学习、人工智能、区块链、预测分析——所有令人惊叹的技术都承诺将革新商业和社会。
IT派
2018/07/30
1K0
30个免费且很棒的公共数据源分享
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
如果希望配置一个集合类型的Bean,而非一个集合类型的属性,则可以通过util命名空间进行配置。
小小工匠
2021/08/16
4700
Spring-注入参数详解-[集合类型属性]
java.util包中的集合类型是最常用的结构数据类型,主要包括List、Set、Map、Properties。
小小工匠
2021/08/16
4090
Spring-注入参数详解-[字面值及引用其他Bean]
在Spring配置文件中,不但可以将String、int等字面值注入bean中,还可以将集合、map等类型的数据注入Bean中, 此外还可以注入配置文件中其他定义的Bean.
小小工匠
2021/08/16
5150
解析类型参数
这个方法有效的原因是:向容量为零的切片追加元素将分配一个新的底层数组。函数体的长度最终比函数签名的长度要短,函数体短是一方面原因,函数签名长是另一方面原因。在本博客文章中,我们将解释为什么函数签名被写成这样。
孟斯特
2023/10/04
1560
解析类型参数
JVM参数类型
1. 标准参数 * -help * -server , -client * -version . -showversion * -cp , -classpath
用户1212940
2022/04/13
5930
JVM参数类型
解析类型参数
这个方法有效的原因是:向容量为零的切片追加元素将分配一个新的底层数组。函数体的长度最终比函数签名的长度要短,函数体短是一方面原因,函数签名长是另一方面原因。在本博客文章中,我们将解释为什么函数签名被写成这样。
孟斯特
2023/10/19
1710
解析类型参数
Spring-注入参数详解-[简化配置方式]
Spring为字面值、引用Bean和集合都提供了简化的配置方式,如果没有用到完整格式的特殊功能,大可使用简化的配置方式。
小小工匠
2021/08/16
2740
找到合适的模型参数提高准确度
如果一直在阅读有关数据科学或机器学习的知识,那么一定遇到与MNIST数据集一起使用的文章和项目。数据集包括一组70,000个图像,其中每个图像是从0到9的手写数字。决定使用相同的数据集来了解如何微调机器学习模型参数可以产生差异。
代码医生工作室
2019/06/21
7290
找到合适的模型参数提高准确度
点击加载更多

相似问题

MULTIPART_FORM_DATA:没有为公共javax.ws.rs.core.Response类型的参数找到注入源

113

无法注册泽西MultiPartFeature

12

泽西ModelValidationException -没有找到注入源

32

泽西3多部分功能没有注入源

115

MULTIPART_FORM_DATA:没有为类型响应的参数找到注入源

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文