2

我知道下面的代码

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

每次访问一个没有 www 的 url 时,用于将 www 添加到 HTTP 主机。

同样的代码

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

用于在 url 变量的值中将 url 中的所有内容发布到 index.php。无需像第一个示例中那样更改 URL(将 url 从不带 www 更改为带 www)。

我想要的有点棘手。

我想如果没有 www 那么应该执行第一个示例步骤。

如果有 www 或任何其他文本,例如 forum.site.com 或 blog.site.com 或 www.site.com,那么就像在第二个示例中一样,它应该默默地指向同名的文件夹。

例如 如果是 www,它应该重写到www/变量后面的文件夹。

像访问者类型 www.site.com 它应该从 www/ 文件夹加载文件,如果访问者类型 www.site.com/index.php?pid=1 那么它应该与index.php?pid=1数据一起被重写到 www/ 文件夹

除了 www 之外的任何东西都应该如此。比如fourm.site.com/index.php?blah=blahBlah等。

希望我不会混淆,也不会违反规则。

4

1 回答 1

0
RewriteEngine On
RewriteCond %{HTTP_HOST} !^.+{3,}
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.*)\.(.+\..+)
RewriteRule ^(.*)$ http://%2/%1/$1 [QSA,L]

第二条规则的算法是这样的:

  1. 我检查,主机至少由 3 个部分组成,用点分隔。这不是一个理想的解决方案,因为有域,自然有 3 个部分,如 .co.uk 和 .com.br。但是,我假设您使用的是由 2 个部分组成的域。
  2. 因此,如果有 3 个部分,例如:www.site.com,我将第 1 部分放入 %1,将第 2 部分放入 %2。所以,%1 = 'www',%2 = 'site.com'。
  3. 将所有内容重定向到http:://site.com/www/request

如果您有 3 部分域,例如 site.co.uk,则可以制定更复杂的规则:

RewriteCond %{HTTP_HOST} ^(.*)\.(.+\..+\..+)
RewriteRule ^(.*)$ http://%2/%1/$1 [QSA,L]

subdomain.site.co.uk这将重写:http://site.co.uk/subdomain/

于 2013-07-31T21:43:11.413 回答