.htaccess REWRITE ONLY如果路径包含NUMBERS和LETTERS

时间:2013-10-22 17:44:22

标签: regex apache .htaccess mod-rewrite

我使用.htaccess在我的网站网址上隐藏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

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

你可以调整正则表达式:

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的评论:

  

What if I want to check if one particular word is in the URL value ? For example, I want to apply this rule, only if there is the word "version" in the value.

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

答案 1 :(得分:0)

尝试:

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]

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