使用查询字符串重写规则

时间:2011-10-19 22:22:38

标签: apache .htaccess

如果QUERY_STRING符合使用该规则的内容,我该怎么做呢?

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^(.*)/?$ index.php?uri=$1 [L,QSA]

RewriteCond %{QUERY_STRING} uri=admin
ReqriteRule ^admin\?(.*)/?$ index.php?uri=admin&q=$1 [L,QSA]

EG。 http://localhost/admin?poll/new?应该是参数q之后,查询将为uri=admin&q=poll/new

我对如何做到这一点有任何想法?

感谢。

1 个答案:

答案 0 :(得分:1)

嗯,碰巧你的问题比我给你的链接更简单,因为你不想对查询字符串内容进行任何分析。

如果您使用此单行:

RewriteRule ^admin index.php?uri=admin&q= [L,QSA]

其中QSA意味着将查询字符串附加到结果中。您将获得内部重定向:

index.php?uri=admin&q=&poll/new

哪个不行,这是因为您使用参数(admin?poll/new)的方式不是标准方式。因此,我们似乎需要捕获查询字符串内容并将其手动放在rewriteRule上。这应该有用(如果你只需要/ admin url):

RewriteCond %{REQUEST_FILENAME} admin [NC]
RewriteCond %{QUERY_STRING} (.*) [NC]
RewriteRule .* index.php?uri=admin&q=%1 [L]

其中%1是RewriteCond中的第一个括号匹配:(.*),表示查询字符串中的所有内容,查询字符串是问号后面的任何内容。所以实际上这允许admin?poll/new,但admin?poll/new&foo=toto允许index.php?uri=admin&q=poll/new&foo=bar