我想附加子域作为查询使用htaccess最终现有的查询。.htaccess:追加子域作为查询现有的查询
http://test.domain.com
应该http://test.domain.com?x=test
http://test.domain.com?id=1
应该http://test.domain.com?id=1&x=test
这是我做了什么,但它不工作,我可以找出原因:
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+)\.domain\.com$ [NC]
// exclude www.domain.com
RewriteCond %1 !^(www)$ [NC]
RewriteRule ^[^\?]*(?:\?(.*))?$ index.php?$1&x=%1 [L]
我的理解是
[^\?]*
除?之外的所有字符,匹配0次或更多次
(?:
开始非捕获组
\?
匹配?字面意思是
(.*)
所有字符都是?作为非捕获组,匹配0或1次
但它不工作的一组
)?
端。我的错误在哪里?
更新1:
我可以使它通过以下规则
RewriteRule (.*) index.php?$1&x=%1 [QSA,L]
http://test1.domain.com?y=test1
工作给我带来了[x=>test1,y=>test2]
但
http://test1.domain.com?y=test1&x=test3
带给我[x=>test3,y=>test2]
因此它覆盖了我的x值。有没有办法阻止?
更新2
这是我现在使用的代码: RewriteEngine叙述在
RewriteCond %{HTTP_HOST} ^(?!www)([\w-]+)\. [NC]
RewriteCond %1::%{QUERY_STRING} !^(.+?)::x=\1(?:&|$) [NC]
RewriteRule^index.php?%{QUERY_STRING}&x=%1 [L]
我的错误,应该是$ 1,但它仍然没有工作... –
关于您的编辑:你能不能只是选择了另一个参数名称而不是'x' - 这在原始请求中不太可能作为查询字符串参数名出现......? – CBroe
我需要依靠的事实,即查询绝对是子域。所以只是选择一些不太可靠的东西是不够安全的...... –