htaccess:RewriteCond匹配测试仪无法比拟的内容

时间:2014-08-12 09:13:20

标签: php regex apache .htaccess mod-rewrite

我有另外一个关于mod_rewrite的问题。如果用户想要图像(.png,。jpe?g,.gif在uri结尾处),则重定向到index1.html,否则指向index2.html。测试器(http://htaccess.madewithlove.be/)与没有.png,jpe?g,.gif的uri不匹配,但是我的localhost确实存在,这就是问题所在。

Corrent示例: 输入:

localhost/image.png

输出

localhost/index1.html

输入:

localhost/image

输出

localhost/index2.html

但我的localhost确实做了什么: 输入:

localhost/image.png

输出

localhost/index2.html

输入:

localhost/image

输出

localhost/index2.html

我的htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^(.*)(.png|.jpe?g|.gif)$
RewriteRule ^(.*)$ index2.html

RewriteCond %{REQUEST_URI} ^(.*)(.png|.jpe?g|.gif)$
RewriteRule ^(.*)$ index1.html
你能帮忙吗?感谢。

3 个答案:

答案 0 :(得分:0)

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} (?!.*?\.png|.*?\.jpe?g|.*?\.gif)^(.*?)$
RewriteRule ^(.*)$ index2.html

RewriteCond %{REQUEST_URI} (?=.*?\.png|.*?\.jpe?g|.*?\.gif)^(.*?)(.png|.jpe?g|.gif)$
RewriteRule ^(.*)$ index1.html

试试这个。为.png添加了一个lookahead.Postive,为没有.png添加了负面。

答案 1 :(得分:0)

你可笑地滥用RewriteCond。简化为:

RewriteEngine On
RewriteBase /
RewriteRule (\.png|\.jpe?g|\.gif)$ index2.html [L,R=303]
RewriteRule !^index[12]\.html$ index1.html [L,R=303]

[L]修饰符('Last')确保不会处理其他规则,从而无需检查第二条规则。 [R=303]使其成为303(请参阅其他)重定向 - 如果需要,可以更改HTTP状态代码。

答案 2 :(得分:0)

这样做:

RewriteEngine On
RewriteBase /

RewriteRule \.(png|jpe?g|gif)$ index1.html [L,NC,R]

RewriteRule !^(index[12]\.html|[^.]+\.(png|jpe?g|gif))$ index2.html [L,NC,R]