htaccess按文件夹和扩展名重定向,带有上限变化

时间:2015-03-19 20:46:19

标签: php apache .htaccess mod-rewrite

进行涉及旧Windows网站到新CMS设置的转换 - 并且由于许多他们不希望重新路由的pdfs /图像的入站链接(出于他们自己的原因),有一些文件夹/文件将保留在包含某些pdfs / images的旧设置中。

当然,对于Windows来说,上限并不是问题,但是对于Linux来说也是如此 - 而且,有几个根文件夹与新网站中的根永久链接同名。

因此,这些重写需要专门针对某些文件/文件夹,还要考虑可能错过的大写。

例如,有一个名为Industries(带有大写字母I)的文件夹,在新系统上,有一个名为“行业”的永久链接。 (小i)。

因此,只要提交了确切的网址,就可以了 - site.com/industries(小i)在CMS中提取正确的页面,以及site.com/Industries/whatever.pdf(大写字母I) )从lefover Industries文件夹中提取pdf文档。

问题是一些入站链接是:site.com/industries/whatever.pdf(无上限),甚至是site.com/INDUSTRIES/whatever.pdf(全部大写 - 是的,这是对的)< / p>

当然没有资本I--然后这些在CMS中失败为404.

所以,我正在尝试创建一个只针对文件类型的重写规则:pdf,jpg和png - 并且仅在通过某些特定文件夹进行访问时。此外,它需要至少考虑避免404s的主要拼写变化 - 当然,如果没有匹配,它应该只是中止并继续前进,以便它可以由cms处理。

到目前为止,使用现有文件夹的示例:Industrial

  RewriteCond %{REQUEST_URI} ^(.*)industrial(.*(jpg|png|pdf))$ OR
  RewriteCond %{REQUEST_URI} ^(.*)INDUSTRIAL(.*(jpg|png|pdf))$
  RewriteRule ^(.*)$ /$1?%1Industrial%2 [L,R=301]

希望你能看到我想做的事情,但到目前为止还没能让它发挥作用。

感谢您提出任何建议

2 个答案:

答案 0 :(得分:1)

在root .htaccess中以这种方式制定规则:

RewriteCond %{REQUEST_URI} ^/industries/(.+?)\.(jpg|png|pdf)$ [NC]
RewriteRule !^Industries/ /Industries/%1.%2 [L,R=301,NE]

答案 1 :(得分:1)

不必担心案件。无需使用[NC]标志。然后它不知道它是如何进入的。在下面的场景代码中。如果URI以“

”的形式出现

http://example.com/Industrial/someimage.jpg

然后它什么都不会做。 NC标志仍将与之匹配。不执行重写。

RewriteCond %{REQUEST_URI} ^/industrial/(.+)\.(jpe?g|png|pdf)$ [NC]
RewriteRule ^ - [L,NC]

http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_nc