我使用.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
有什么想法吗?谢谢!
答案 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
文件。