如何做live.mywebsite.com => mywebsite.com/live通过.htaccess?

我需要做以下的事情

  1. 将这个子域名映射到mywebsite.com/live/something,例如:
    www.live.mywebsite.com/ ==> www.mywebsite.com/live/ http://live.mywebsite.com/ ==> http://mywebsite.com/live/ www.live.mywebsite.com/something ==> www.mywebsite.com/live/something http://live.mywebsite.com/something ==> http://mywebsite.com/live/something

  2. 我想在网页浏览器中隐藏重写的url。 此网域将显示www.live.mywebsite.com/something而不是www.mywebsite.com/live/something

    3- Live是wordpress中的一个类别的名称,没有文件夹叫做“live”

这是我在.htaccess

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

仅供参考,我通过Parallels Power Panel添加了子域名。

还有一件事,我不能安装任何插件来完成这项工作。

看起来像你想VirtualDocumentRoot 。 例如:

 <VirtualHost *:80> ServerName mywebsite.com ServerAlias www.mywebsite.com DocumentRoot /var/www/ <Directory /var/www/> Order Allow,Deny Allow from all </Directory> </VirtualHost> <VirtualHost *:80> ServerName subdomains.mywebsite.com ServerAlias *.mywebsite.com VirtualDocumentRoot /var/www/%-3/ <Directory /var/www/> Order Allow,Deny Allow from all </Directory> </VirtualHost> 

这将使用域名的倒数第三部分作为正常的webroot下的子目录,所以livewww.live.mydomain.comabcdstuff.mydomain.com stuff

让我们看看我是否得到这个权利:

您有一个由以下组件组成的URL:

 (www.)category.domain.com/(something) 

这需要重写

 (www.)domain.com/category/(something). 

我认为你可以用RewriteRules来做到这一点,你似乎已经在那里得到了。 既然你要通过反向代理隐藏目标URL,我们可以忽略任何领先的www,我们只是代理到本地主机。

 RewriteCond %{HTTP_HOST} ([^.]+)\.domain.com RewriteCond %1 !www Rewriterule (.*) http://localhost/%1/$1 [P] 

这在内部代理到本地主机。 这样做有没有进入循环的优势。 第二个RewriteCond是为了避免代理www.domain.com(这可能是你pipe理你的网站…)

WordPress在.htaccss中添加了它自己的规则,并且您需要在这些规则前面添加这些规则。 所以你可能最终得到这样的东西:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ([^.]+)\.domain.com RewriteCond %1 !www Rewriterule (.*) http://localhost/%1/$1 [P] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress 

你可以结合这个WordPress的.htaccess规则,所以你不需要一个内部代理…

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php - [L] RewriteCond %{HTTP_HOST} ([^.]+)\.domain.com RewriteCond %1 !www Rewriterule (.*) index.php/%1/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

注意:您需要将matchin中的第一条规则更改为index.php,以匹配任何以index.php开头的规则。