问题描述
我试图按照下面的描述在 Apache 中编辑 URL,但是我没有成功。
如果 URI 以字母 'a' 开头且第三位数字不是 '7' 且总位数为 6
然后应该将 url http://example.com/a/123456/
重写为 http://example.com/sixdigits.php
如果 URI 以字母 'b' 开头且第三位数字不是 '7' 且总位数为 4,则 url http://example.com/b/1234/
应改写为 http://example.com/fourdigits.php
这是我对 .htaccess 文件的尝试。
RewriteRule ^a/[0-9]+/$ sixdigits.php
RewriteRule ^b/[0-9]+/$ fourdigits.php
解决方法
您能否尝试使用所示示例进行以下操作、编写和测试。请确保在测试您的网址之前清除浏览器缓存。
RewriteEngine ON
RewriteRule ^a/([0-9]{2})([012345689])([0-9]{3})/?$ sixdigits.php [NC,L]
RewriteRule ^b/([0-9]{2})([012345689])([0-9])/?$ fourdigits.php [NC,L]
,
另一个正则表达式:
RewriteEngine On
RewriteRule ^a/\d{2}[^7\D]\d{3}/?$ sixdigits.php [L]
RewriteRule ^b/\d{2}[^7\D]\d/?$ fourdigits.php [L]
-
[^7\D]
将匹配除7
之外的任何数字
您可以使用:
-
[^7]
表示NOT 7
-
\d
表示[0-9]
-
{2}
等表示two of the preceding character
因此:
如果 URI 以字母 a
开头并且第三个数字不是 7
总位数是 6 然后 url http://example.com/a/123456/
应该是
重写为 http://example.com/sixdigits.php
RewriteRule ^a/\d{2}[^7]\d{3}/?$ sixdigits.php
如果 URI 以字母 b
开头并且第三个数字不是 7
总位数是 4 然后 url http://example.com/a/1234/
应该是
重写为 http://example.com/fourdigits.php
RewriteRule ^b/\d{2}[^7]\d/?$ fourdigits.php