2

我使用 .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

有任何想法吗?谢谢!

4

2 回答 2

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]
于 2013-10-22T17:47:24.483 回答
1

尝试:

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文件。

于 2013-10-22T17:49:09.880 回答