0

我尝试使用 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。

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

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

4

3 回答 3

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

RewriteCond  %{REQUEST_URI}  !^/index.php
RewriteRule .*  404.php
于 2013-08-17T03:10:57.557 回答
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]
于 2013-08-17T03:12:30.627 回答
0

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

RewriteEngine On

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

RewriteRule .* index.php [L]

如果 REQUEST_URI 不是从 /index.php 开始或从根 '/' 开始并且长度 > 6 - 禁止,否则指向 index.php

于 2013-08-18T06:01:18.870 回答