Назад | Перейти на главную страницу

Как сделать live.mywebsite.com => mywebsite.com/live через .htaccess?

Мне нужно сделать следующее

  1. Сопоставление этого поддомена 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

  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>

Это будет использовать предпоследнюю часть доменного имени в качестве подкаталога под обычным корневым веб-каталогом, поэтому live для www.live.mydomain.com и stuff для a.b.c.d.stuff.mydomain.com.

Посмотрим, правильно ли я понял:

У вас есть 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>

Примечание: вам нужно изменить первое правило с matchin just index.php, чтобы сопоставить все, что начинается с index.php ...