我正在制作一个网站,目前只使用xampp从localhost运行。我正在使用mod-rewrite将所有内容重定向到我的索引,到目前为止一直有效。
# From /somepage
# To ?site=somepage
RewriteRule ^([^/\.\?=]+)/?$ ?site=$1 [L]
# From /somepage=ID
# To ?site=somepage&sub=ID
RewriteRule ^([^/\.\?=]+)=([^/\.\?]+)/?$ ?site=$1&sub=$2 [L]
但我还希望能够在URL的末尾添加更多查询字符串变量,这样您就可以发送或标记该链接,而重定向仍然有效。我做了这样的事情:
# From /somepage?morevars
# To ?site=somepage&morevars
RewriteRule ^([^/\.\?=]+)\?(.+) ?site=$1&$2 [L]
我为此尝试了不同的变体,还包括条件或将其与其他规则合并,但没有成功。它似乎与第一条规则相匹配,但我不确定。
答案 0 :(得分:2)
给予RewriteRule的模式与请求URL路径匹配。也就是说,请求URL 没有方案,主机,端口和查询字符串。
您需要将[QSA](查询字符串追加)标记添加到第一个规则。请参阅RewriteRule的参考文档。
答案 1 :(得分:2)
.htaccess
按顺序处理,因此如果Apache找到匹配并且您正在使用[L]
标志,则它会停止,因为这是Last命令。不应该需要?
匹配,因为RewriteRule会将它们视为查询字符串并忽略它们。
注意: Query String
模式不会与查询字符串匹配。相反,你 必须使用带有%{QUERY_STRING}变量的RewriteCond。您可以, 但是,在替换字符串中创建包含查询的URL 字符串部分。只需在替换中使用问号 string,表示应重新注入以下文本 查询字符串。如果要删除现有查询字符串,请结束 替换字符串只有一个问号。结合一个新的 使用旧的查询字符串,使用[QSA]标志。
这应该有用。
RewriteRule ^([^/\.=]+)=([^/\.]+)/?$ ?site=$1&sub=$2 [L]
RewriteRule ^([^/\.=]+)/?$ ?site=$1 [QSA,L]