我尝试用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)
重定向到其他资源
答案 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