Apache: Использование перенаправления VirtualHost на URL с применением RewriteCond? - PullRequest
0 голосов
/ 09 октября 2018

Итак, у меня есть RewriteCond, который превращает:

domain.com/view.php?a=1

в:

domain.com/artist/name

У меня более короткий домен: dmn.com, для которого я хотел бы предоставить короткие ссылки для художников:

dmn.com/name

Как я могу заставить dmn.com/name перенаправить на: domain.com/artist/name, сохраняя шортлинк в такте?

.htaccess:

#rewrite profile requests
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule artist/(.*)$ view.php?a=$1 [QSA,NC,L]

httpd.conf:

<VirtualHost *:80>
    DocumentRoot /var/www/html/ // <-- ??? not sure what to put here
    ServerName dmn.com
    ServerAlias www.dmn.com
</VirtualHost>

Поскольку каталог "/ artist" на самом деле не существует (так как он перезаписывается), я не могу поместить /var/www/html/artist в DocumentRoot конфигурации VirtualHost без разбрызгивания Apacheназад:

Warning: DocumentRoot [/var/www/html/artist] does not exist

1 Ответ

0 голосов
/ 09 октября 2018

Я думаю, что вы хотите не реальное перенаправление, а другое переписывание.

Вы не можете сделать это с отдельным VirtualHost.Ну, вы можете, если вы укажете на тот же DocumentRoot и продублируете свои правила или загрузите их из общего файла, либо с помощью директивы .htaccess или Include.

Вы также можете добавить короткийдоменное имя для вашего основного домена ServerAlias

<VirtualHost *:80>
    # This should point to your current config
    DocumentRoot /var/www/artists_profiles/
    ServerName example.com
    ServerAlias www.example.com ex.com www.ex.com
</VirtualHost>

Затем вы добавляете новые правила в начало файла:

RewriteBase /
RewriteCond %{HTTP_HOST} ex.com
RewriteRule ^(^.*) artist/$1

Затем ваши существующие правила должны забрать.Если вы хотите, чтобы сокращенный домен не отвечал на более длинные URL-адреса, вы можете добавить аналогичный RewriteCond к существующим правилам:

RewriteCond %{HTTP_HOST} !ex.com
...