我在我的htaccess文件中有这些条件和规则,它可以正常工作并完成它应该做的事情。
RewriteCond %{REQUEST_URI} !^/index/parser.php?(.*)?$
RewriteCond %{HTTP_HOST} ^(.*)\.mydomain\.extension$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-.]+)\.mydomain\.extension [NC]
RewriteRule ^(.*)$ http://mydomain.extension/index/parser.php?%2&domain_name=mydomain.extension [QSA,L]
我想重写它,以便它可以使用指向服务器的任何域名,但不知道如何。我试过这个,但失败了。它应该只在子域上激活,而不是在根域上激活。此外,我不熟悉htaccess文件中的整个美元符号和百分比使用情况。 $ 1,$ 2,%1,%2等。永远不知道应该使用美元或百分比,或者使用后使用的数字。
RewriteCond %{REQUEST_URI} !^/index/parser.php?(.*)?$
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-.]+)\.(.*) [NC]
RewriteRule ^(.*)$ /index/parser.php?%2&domain_name=%1 [QSA,L]
修改
在最后一行尝试过这个。仍然没有工作。
RewriteRule ^(.*)$ http://%1/index/parser.php?%2&domain_name=%1 [QSA,L]
修改
尝试了建议,并且这样做了:
something.tld
转到此处:
http://tld/index/parser.php?something&domain_name=tld
应该是:
http://something.tld/index/parser.php?something&domain_name=something.tld
修改
下一个版本也没有用。显示内部服务器错误页面。无论是使用domain.tld还是使用了subdomain.domain.tld,都会出现相同的错误。
答案 0 :(得分:1)
怎么样:
RewriteCond %{REQUEST_URI} !^/index/parser.php
RewriteCond %{HTTP_HOST} ^(?:www\.|)([a-z0-9-]+)\.(.+\.(?:[a-z]{2}\.[a-z]{2}|[a-z]+))$ [NC]
RewriteRule ^(.*)$ http://%2/index/parser.php?%1&domain_name=%2 [QSA,L]
所以这将要求:
http://www.foo.some-domain.tld/anything
并重定向到:
http://some-domain.tld/index/parser.php?foo&domain_name=some-domain.tld
就反向引用而言,重写规则中的$
个反向引用分组,而重写条件中的%
个反向分组。
请参阅:http://httpd.apache.org/docs/trunk/rewrite/intro.html#regex