HTTP响应403.我的Apache配置或URL的Python代码是否出了问题?

问题描述

当我访问

http://my_site.com/api/my_project/submitSearch.PHP?skills=C+OR+%28C%2B%2B+AND+UML%29

我收到403的HTTP响应。

关键是我正在使用skill=C OR (C++ AND UML)在Python中编码urllib.parse.quote_plus()

如果我使用skill=(C++ AND UML),那就没有问题。

http://my_site.com/api/my_project/submitSearch.PHP?skills=%28C%2B%2B+AND+UML%29

我只能假设URL触发了某些Apache配置规则。我问我的ISP,他们的解决方案是允许从我当前的IP地址进行所有访问。但是,我想允许所有人访问此URL,那么如何配置我的Apache来允许该URL?

或者,我是否在Python中错误地编码了我的URL?奇怪的是,当我在JavaScript中使用encodeURIComponent()时,服务器不会拒绝该请求。

因此,JS / Python编码是

Python:http://localhost/api/enigma/submitSearch.PHP?skills=C+OR+%28C%2B%2B+AND+UML%29

JS:http://localhost/api/enigma/submitSearch.PHP?skills=C%20OR%20(C%2B%2B%20AND%20UML)

此外,问题仅出在我的ISP上,而不是localhost

解决方法

您可以尝试将.htaccess文件添加到包含Apache服务器相关目录中内容的目录(甚至网站的根目录)中。这应该将访问权限授予尝试访问该目录的任何人。

 Allow From All
 Satisfy Any
 AllowOverride

您甚至可以像这样包装这些指令:

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
 AllowOverride
</Directory>

使其适用于给定目录。

,

我对Apache不熟悉,所以在这里我无能为力。

要获得与JavaScript version: "3.8" services: influxdb: image: influxdb restart: unless-stopped ports: - 8086:8086 volumes: - influxdb-volume:/var/lib/influxdb networks: - test chronograf: image: chronograf restart: unless-stopped ports: - 8888:8888 volumes: - chronograf-volume:/var/lib/chronograf depends_on: - influxdb networks: - test volumes: influxdb-volume: chronograf-volume: networks: test: driver: bridge 相同的输出,请尝试将encodeURIComponenturllib.parse.urlencode一起使用(而不是urllib.parse.quote)。

quote_plus

query = {"skills": "C OR (C++ AND UML)"} query_string = urllib.parse.urlencode(query,safe="-_.!~*'()",quote_via=urllib.parse.quote) print(query_string)