仅降低请求的网址

时间:2018-01-06 00:10:52

标签: regex apache mod-rewrite url-rewriting

问题

我认为我只需要将最终用户请求的PDF文件的文件扩展名重写为小写,但不要小写整个URL。

背景

我有一个Web应用程序,其中包含指向一些PDF文件的链接。这些文件的名称大小写混合,但文件扩展名为小写(Bobs_Your_Mom.pdf)。

此应用程序的旧版本只是静态Web内容。在该版本中,文件具有大写的文件扩展名(Bobs_Your_Mom.PDF

为了这个例子,我无权更改PDF文件的名称,或强制应用程序中的所有URL都是小写的。

在此应用程序的前面是一个充当ReverseProxy的Apache Web服务器。进入:80的流量会重定向到:443,代理会将流量通过内部防火墙重定向到后端服务器等等。

目前,最终用户不会通过其Web浏览器操纵URL。然而,虽然旧的“网站”和新的“应用程序”明显不同于技术角度...大约两个月后,我仍然收到带有大写文件扩展名(.PDF)的相关PDF文件的请求。 / p>

Web应用程序实际上不会像旧网站那样直接公开PDF文件,用户必须采取一些特殊操作来立即发出请求。

我一直希望这个问题能够解决,因为收到的404错误会提醒人们已经做出更改,等等。但事实并非如此,而且几分钟前我仍然会收到大写文件名的404。

受审

检查错误代码

我已经与开发人员进行了验证,并自己手动验证了应用程序中所有大写字母中的PDF文件都没有引用。这实际上是我发现旧网站确实如此拥有它的方式。

要求开发人员更改应用/小写整个URI /业务以更改文件名

开发人员表示没有能力/时间来更改应用程序以强制应用程序本身内的所有URI小写,并且业务已表明客户端不希望我们以任何方式实际更改文件名。

301/302 REDIRECTS

这种改变并不适用于SEO,如果我知道404来自同一组带有书签的用户,旧的文件名重定向到新文件名就可以了(旧网站已经存在两个月了切换到网络应用程序)。但是请求来自完全不同地理区域的全新用户,而且我无法理解如此多的随机用户如何拥有一个只存在两个月且没有太多宣传的URL的书签。

DUDE DUPLICATE ISSUE / CHECK OTHER POSTS

从我所看到的,其他人需要帮助重写整个URI或不是文件扩展名的URI的一部分,或者只是完全隐藏扩展名。

我对正则表达不够熟练,无法自己解决这个问题(正则表达式对我来说是一场生活中的挣扎)。我不能真正在其他帖子中做出表达的正面或反面,这样可以理解我改变的内容以及为什么像正则表达式一样让我感到困惑。

您的帮助

然而,有几十个我认为每天都有不必要的负面用户体验,我希望mod-rewrite和Apache可以帮助我。 (警告:我是正则文盲)。

通常在堆栈上我想要指向正确的方向。我相信用户(包括我自己)应该能够将事情拼凑在一起,并且只需要一些指导即可。

在这种情况下,我周围没有任何人能够使用正则表达式来帮助完成我的任务,只需在飞行中请求时将.PDF转换为.pdf

如果我可以获得转换帮助:

Im_An_Example.PDF

Im_An_Example.pdf

今天你将成为我的救世主并赢得25个完整的互联网。

最终解决方案

@ signal2013建议的最终解决方案如下:

RewriteEngine on
RewriteRule ^(.*).PDF$ http://exmple.com/$1.pdf [R=301,L]

解决方案很简单,我承认在我自己解决这个问题时,我的想法会变得更加复杂。

1 个答案:

答案 0 :(得分:3)

是的,就像@marekful说的那样,你的问题有点太长了。你在找这样的东西......可以进入.htaccess档。

RewriteEngine on
RewriteRule ^(.*).PDF$ http://exmple.com/$1.pdf [R=301,L]