通过htaccess指导网址

时间:2013-07-31 21:02:02

标签: php .htaccess url

我知道下面的代码

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

用于在每次访问网址时将www添加到HTTP主机,而无需使用www。

同样代码

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然后在第二个例子中,它应该默默地指向同名的文件夹。

eE.g。如果是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等。

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

1 个答案:

答案 0 :(得分: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
  4. 如果您有3个部分域名,例如site.co.uk,则可以制定更复杂的规则:

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

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