使用mod_rewrite检查REQUEST_URI

时间:2013-08-17 02:47:40

标签: apache .htaccess mod-rewrite apache2

我尝试用mod_rewrite按长度限制REQUEST_URI,现在我遇到了一些问题。 代码:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(/[a-zA-Z0-9]{6}/?$)
RewriteRule ^ index.php [L]

它工作正常,并且所有REQUEST_URI == lentgh(6)指向index.php,但我需要所有不匹配的REQUEST_URI被禁止或重定向到error.html for ex。

提前致谢。 我正在使用Apache> 2.4.4

UPD 我的意思是这个例子: If REQUEST_URI == len(6)指向index.php If REQUEST_URI != len(6)重定向到其他资源

3 个答案:

答案 0 :(得分:1)

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]{6})$
RewriteRule .* index.php [L]

RewriteCond  %{REQUEST_URI}  !^/index.php
RewriteRule .*  404.php

答案 1 :(得分:0)

一种方法是创建另一个使用否定前瞻的规则。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(?!/[a-zA-Z0-9]{6}/?$)
RewriteRule ^ http://google.com [L,R=301]

RewriteCond %{REQUEST_URI} ^(/[a-zA-Z0-9]{6}/?$)
RewriteRule ^ index.php [L]

答案 2 :(得分:0)

我为我的情况提出了一个更优雅(也可能更快)的解决方案。

RewriteEngine On

RewriteCond %{REQUEST_URI} [^/.]{7}
RewriteRule ^ - [F]

RewriteRule .* index.php [L]

如果REQUEST_URI没有从/index.php启动或从root'/'开始,长度> 6 - 禁止,否则指向index.php