我尝试在本地服务器上运行一个网站(可以在线运行)。该网站加载没有问题,但是当我单击某种格式的链接时,我在 X:\xampp pache\logs 中收到此错误:
访问.log
::1 - - [18/Jan/2024:14:56:53 +0100] "GET /xtc2/Agip-Novecento:::16131.html HTTP/1.1" 403 299 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
错误日志
[Thu Jan 18 14:56:53.289002 2024] [core:error] [pid 3600:tid 1880] (20024)The given path is misformatted or contained invalid characters: [client ::1:52392] AH00127: Cannot map GET /xtc2/Agip-Novecento:::16131.html HTTP/1.1 to file
当我按照X:\xampp\htdocs\xtc2\.htaccess中的规则重写链接时
##-- Use colon delimiter ":" for SEO-URLS (default setting)
##-- Categories (:::)
RewriteRule :::([_0-9]+):([_0-9]+)\.html$ index.php?cPath=$1&page=$2 [QSA,L]
RewriteRule :::([_0-9]+)\.html$ index.php?cPath=$1 [QSA,L]
我收到“404/禁止/您无权访问此资源。”
本地服务器:Win 10 计算机上位于本地主机端口 80 的 Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/7.4.33 服务器。
我编辑了 htacces 并手动编辑了链接,我在不同的服务器上测试了这些链接。
“问题”是您正在 Windows 服务器上测试此功能,并且
:
(冒号)不是 Windows 文件名中允许的字符。
当您向网络服务器(本例中为 Apache)发出请求时,请求将映射到文件系统。此时会出现“403 Forbidden”响应。不幸的是,
.htaccess
是在请求已映射到文件系统之后处理的,因此无法在.htaccess
中解决。
您也许可以直接在服务器配置/
<VirtualHost>
容器中(而不是在<Directory>
容器中)使用这些规则。但是,您的规则需要稍微修改。例如:
RewriteRule :::([_0-9]+):([_0-9]+)\.html$ /index.php?cPath=$1&page=$2 [QSA,L]
RewriteRule :::([_0-9]+)\.html$ /index.php?cPath=$1 [QSA,L]
注意 substitution 字符串上的斜杠前缀。
但是,这仍然可能无法解决问题。通常,您会“重定向”此类请求(在服务器配置中)以remove这些无效字符。
##-- Use colon delimiter ":" for SEO-URLS (default setting)
如果您想在 Windows 计算机上运行此软件,那么我建议更改 URL 中使用的(默认)分隔符。