我让.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>
答案 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]