linux - 不区分大小写的重写规则

标签 linux windows apache mod-rewrite

所以我有一个重写规则,因为旧站点需要它,并且有一些从另一个网站链接的图像,问题是我无法手动修复 url,因为有很多图像。

所以在网站托管在Windows之前,如果你想链接这样的图片是没有问题的:

http://www.example.com/Fder69.JPG并且文件名为“fder69.JPG”它确实有效,现在我有一个这样的重写规则:

RewriteRule ^([^/.]+.JPG)$/imgs/$1 [L,NC,R=302] 所以基本上把旧的链接重写成新的结构,但是有些图片没有确切的文件名不起作用。

有没有办法做到这一点?使用类似 CheckSpelling Off 或 ?我可以使重写条件接受 .JPG 和 .jpg,有什么提示吗?

最佳答案

一个选项是将所有文件重命名为全小写,这通常会产生更好的 URL,然后将任何对混合大小写版本的请求重定向到全小写。

这种方法的优点是每个文件最终只有一个 URL,而不是像使用 mod_speling 时出现在多个 URL 下的相同内容。 .这有利于搜索引擎排名等。

重命名所有文件的一种方法是在 shell 脚本中生成一堆 mv 命令,如下所示:

find . | perl -ne 'chomp; print "mv \"", $_, "\" \"", lc $_, "\"\n";' > rename-files.sh

请注意,我不保证这不会弄乱您的所有文件,但我认为这是正确的...

重定向是使用“RewriteMap”完成的,这是一个可以应用于 RewriteRule 右侧的函数。 built-in mappings available之一是 int:tolower,允许您这样做:

# Alias the mapping function as "lc"
RewriteMap  lc int:tolower
# Perform the substitution if the URL contains uppercase letters
RewriteCond %{REQUEST_URI} [A-Z]
# Issue a 301 redirect to the all-lowercase version
RewriteRule /(.*) /${lc:$1} [R=permanent,L]

关于linux - 不区分大小写的重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257796/

相关文章:

php - Laravel 5.2 队列 - 延迟不起作用

linux - 部署到 Linux 应用服务时,Angular CLI 应用程序未运行

windows - 在 Windows 资源管理器中使用 IntelliJ IDEA 隐藏编辑

c++ - 如何在 C++ 中手动运行消息泵

linux - 如何通过将 ids 列表与 LINUX 中的另一个数据文件进行比较来给予 ids 列表相同的排名?

linux - 如何在 linux 上获取正在运行的线程的起始地址?

python - 如何在 Windows 中重定向 Python 中的 C 级流?

php - 什么时候 404 不是 404?

php - Python 无法打开文件

linux - 如何将域名映射到我在 Tomcat 服务器上运行的 Java 应用程序