2013-10-22 58 views
2

我用的.htaccess躲让我的网站URL变量是这样的:的.htaccess仅重写,如果路径包含数字和字母

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 

任何想法?谢谢!

回答

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] 
+0

感谢您的回复,但它不起作用。我尝试了网址“www.website.com/hello”(价值中没有数字,所以我不想重定向),但是htaccess仍然会将我重定向到'www.website.com/index.php?var=你好'... – Faks

+1

工程太棒了!非常感谢(我不能为您的答案投票,没有足够的声誉;)如果我想检查URL值中是否有某个特定单词,该怎么办?例如,我想应用此规则,只有在值中有“版本”这个词时才适用。有任何想法吗? – Faks

+0

超级!最后要感谢您的帮助,如果我想检查价值的长度,我该怎么办?例如,我只想在长度> = 13时检查该值。有这样一个方法吗?是否像{> = 13}?再次感谢。 – Faks

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为index.php文件,如果ID包含数字和字母。

+0

感谢您的答复,但它不起作用。在我尝试URL www.website后,我上传了您的代码。com/hello'(值中没有数字,所以我不想重定向),但是htaccess会将我重定向到'www.website.com/index.php?var=hello' – Faks

相关问题