Regex .htaccess仅当路径包含数字和字母时重写

Regex .htaccess仅当路径包含数字和字母时重写,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我使用.htaccess在我的网站URL上隐藏GET变量,如下所示: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-Z0-9]+)$ index.php?music=$1 [NC,L] 我能得到的唯一变量是一个包含字母和数字的唯一ID。因此,我想创建一个规则来检查GET变量是否包含字母和数字 我想要的是: http://www.website.com/123456

我使用.htaccess在我的网站URL上隐藏GET变量,如下所示:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Z0-9]+)$ index.php?music=$1 [NC,L]
我能得到的唯一变量是一个包含字母和数字的唯一ID。因此,我想创建一个规则来检查GET变量是否包含字母和数字

我想要的是:

http://www.website.com/123456ABCDEF > http://www.website.com/index.php?var=123456ABCDEF
我不想要的是:

http://www.website.com/123456 > http://www.website.com/index.php?var=123456
http://www.website.com/ABCDEF > http://www.website.com/index.php?var=ABCDEF

有什么想法吗?谢谢大家!

您可以调整正则表达式:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!(?:[A-Z]+|[0-9]+)$)[0-9A-Z]+)$ index.php?music=$1 [NC,L,QSA]
这将允许:

  • /abc123
  • /987xyz
但它不允许:

  • /hello
  • /777
更新:它基于OP的评论:

如果我想检查URL值中是否有一个特定单词,该怎么办?例如,仅当值中有“version”一词时,我才想应用此规则。


您可以调整正则表达式:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!(?:[A-Z]+|[0-9]+)$)[0-9A-Z]+)$ index.php?music=$1 [NC,L,QSA]
这将允许:

  • /abc123
  • /987xyz
但它不允许:

  • /hello
  • /777
更新:它基于OP的评论:

如果我想检查URL值中是否有一个特定单词,该怎么办?例如,仅当值中有“version”一词时,我才想应用此规则。

尝试:

如果ID同时包含数字和字母,这将仅将ID路由到
index.php
文件。

尝试:


如果ID同时包含数字和字母,这只会将ID路由到
index.php
文件。

谢谢您的回复,但它不起作用。在我尝试了URL“www.website.com/hello”(值中没有数字,所以我不想重定向)之后,我上传了你的代码,但是htaccess将我重定向到“www.website.com/index.php?var=hello”,谢谢你的回复,但它不起作用。在我尝试了URL“www.website.com/hello”(值中没有数字,所以我不想重定向)之后,我上传了你的代码,但是htaccess将我重定向到“www.website.com/index.php?var=hello”,谢谢你的回复,但它不起作用。我尝试了URL“www.website.com/hello”(值中没有数字,所以我不想重定向),但htaccess仍然将我重定向到“www.website.com/index.php?var=hello”…效果很好!非常感谢(我不能投票支持你的答案,声誉不够;)如果我想检查URL值中是否有一个特定的单词,该怎么办?例如,仅当值中有“version”一词时,我才希望应用此规则。有什么想法吗?太好了!非常感谢您的帮助,最后一件事,如果我想检查值的长度,该怎么办。例如,我只想在长度>=13时检查该值。有办法做到这一点吗?是不是有点像{>=13}?再次感谢。可以通过正则表达式进行长度检查,现在检查更新的答案。
?:
表示什么?我一直在网上寻找,但找不到这种组合的参考,干杯谢谢你的回复,但它不起作用。我尝试了URL“www.website.com/hello”(值中没有数字,所以我不想重定向),但htaccess仍然将我重定向到“www.website.com/index.php?var=hello”…效果很好!非常感谢(我不能投票支持你的答案,声誉不够;)如果我想检查URL值中是否有一个特定的单词,该怎么办?例如,仅当值中有“version”一词时,我才希望应用此规则。有什么想法吗?太好了!非常感谢您的帮助,最后一件事,如果我想检查值的长度,该怎么办。例如,我只想在长度>=13时检查该值。有办法做到这一点吗?是不是有点像{>=13}?再次感谢。可以通过正则表达式进行长度检查,现在检查更新的答案。
?:
表示什么?我一直在网上寻找,但找不到这种组合的参考,干杯
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/([A-Z]+|[0-9]+)/?$
RewriteRule ^([0-9A-Z]+)/?$ index.php?var=$1 [L,NC]