不区分大小写的重写规则

时间:2015-08-27 19:19:14

标签: linux windows apache mod-rewrite

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

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

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

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

有没有办法实现这个目标?像CheckSpelling Off或?我可以让重写cond接受.JPG和.jpg,任何提示吗?

1 个答案:

答案 0 :(得分:0)

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

这种方法的优势在于,每个文件最终只有一个网址,而不是在使用mod_speling的情况下出现在多个网址下的相同内容。这对搜索引擎排名很有帮助。

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

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

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

重定向是使用" RewriteMap"完成的,这是一个可以应用在RewriteRule右侧的函数。其中一个built-in mappings availableint: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]
相关问题