1

I made .htaccess to read $_GET['ht'] AND $_GET['hht'] as /ht/hht but now it dont read custom values when I add to url. For example mydomain.com/ht/?smth=else - it doest read $_GET['smth']. How can I change that?

My .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>
4

1 回答 1

2

你的REGEX. 最后两条规则也可以合并。此外,您在第二个 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]
于 2013-04-28T16:34:33.407 回答