我需要做以下的事情
将这个子域名映射到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
我想在网页浏览器中隐藏重写的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下的子目录,所以live在www.live.mydomain.com和abcdstuff.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开头的规则。