三个条件和一个规则在htaccess文件中使用任何域名

时间:2015-10-09 18:28:12

标签: apache .htaccess mod-rewrite

我在我的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,都会出现相同的错误。

1 个答案:

答案 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

enter image description here