.htaccess不读取自定义请求

时间:2013-04-28 16:20:06

标签: php .htaccess

我让.htaccess阅读$_GET['ht'] AND $_GET['hht'] as /ht/hht,但现在我在添加到网址时没有阅读自定义值。例如mydomain.com/ht/?smth=else - 它读取$_GET['smth']。我怎么能改变它?

我的.htaccess

<IfModule mod_rewrite.c>
  RewriteEngine on
    RewriteBase /

  RewriteCond %{REQUEST_FILENAME} -f [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule .* - [L]

  RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)$ index.php?ht=$1&hht=$2
  RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)/$ index.php?ht=$1&hht=$2
  RewriteRule ^([a-zA-Z0-9-z\-]+)$ index.php?ht=$1&hht=$2
  RewriteRule ^([a-zA-Z0-9-z\-]+)/$ index.php?ht=$1&hht=$2
</IfModule>

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>


<Files .htaccess>
order allow,deny
deny from all
</Files>

1 个答案:

答案 0 :(得分:2)

REGEX中还有一个额外的“-z”。最后两条规则也可以合并。您还要在第二个REGEX中声明一个不在模式中的变量。由于只有一组括号,并且您在没有递归的情况下匹配字符串的开头和结尾,因此不会创建$2

保持变量使用RewriteRule QSA|qsappend

  

当替换URI包含查询字符串时,默认行为   RewriteRule是丢弃现有的查询字符串,并替换它   与新生成的一个。使用[QSA]标志会导致查询   要组合的字符串。

要停止处理匹配规则,请使用RewriteRule L|last

  

如果您在.htaccess文件或中使用RewriteRule    部分,重要的是要有一些了解   如何处理规则。简化形式就是这一次   规则已经处理,重写的请求被交还给   URL解析引擎可以用它做它可能做的事情。它可能是   当处理重写的请求时,.htaccess文件或   可能会再次遇到该部分,因此可以运行规则集   从一开始。最常见的情况是,如果其中之一   规则导致重定向 - 内部或外部 - 导致   请求流程重新开始。

RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ index.php?ht=$1&hht=$2 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?ht=$1 [QSA,L]