.htaccess重定向查询字符串

时间:2013-07-10 23:00:25

标签: .htaccess mod-rewrite apache2

我创建了一个.htacces文件,它执行以下操作:

  • /重定向到/.index/(在地址栏中可见)

  • /hu/en重定向至/.index/hu/.index/en(在地址栏中可见)

然后

  • /.[p]/[l]之类的请求重定向到/index.php?page=[p]&lang=[l](在地址栏中不可见)

但是..

我想在结尾处保留查询字符串,这意味着访问/.[p]/[l]?a=b会导致对/index.php?page=[p]&lang=[l]&a=b的请求

我似乎无法让正则表达式为此工作。这是整个.htaccess文件:

RewriteEngine On
RewriteBase /Main/djdavid98/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(hu|en)?(\/?(\?(([\S]+\=[\S]+)*))?)?$ ./.index/$1$3 [R=301,L]
RewriteRule ^\.([\w\d]+)(\/(hu|en))?\/?(\?(([\S]*=[\S]*)+))?$ index.php?page=$1&lang=$3&$5

1 个答案:

答案 0 :(得分:1)

使用QSA flag for RewriteRule,它会将已经存在的任何查询字符串附加到您在规则目标中构建的字符串的末尾:

RewriteRule ^\.([\w\d]+)(\/(hu|en))?\/?(\?(([\S]*=[\S]*)+))?$ index.php?page=$1&lang=$3&$5 [L,QSA]

请注意,查询字符串会自动附加到结尾,除非您在规则的目标中构建了自己的字符串。这就是为什么第一条规则将保留查询字符串,但第二条规则不会。