我需要做以下事情
将此子域 live.mywebsite.com/something 映射到 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 添加了子域。
还有一件事,我无法安装任何插件来完成这项工作。
答案1
看起来你想要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
和stuff
对于a.b.c.d.stuff.mydomain.com
。
答案2
让我们看看我是否理解正确:
您有一个由以下部分组成的 URL:
(www.)category.domain.com/(something)
这需要重写为
(www.)domain.com/category/(something).
我认为您可以使用 RewriteRules 来实现这一点,而且您似乎已经完成了一部分。由于您无论如何都要通过反向代理隐藏目标 URL,因此我们可以忽略任何开头的 www,并且我们只需代理到 localhost。
RewriteCond %{HTTP_HOST} ([^.]+)\.domain.com
RewriteCond %1 !www
Rewriterule (.*) http://localhost/%1/$1 [P]
这会在内部代理到 localhost。这样做的好处是不会陷入循环。第二个 RewriteCond 是为了避免代理 www.domain.com(这可能是您管理网站的地方...)
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>
注意:您需要将第一条规则从仅匹配 index.php 更改为匹配以 index.php 开头的任何内容...