Apache:使用VirtualHost重定向到URL并应用RewriteCond吗?

时间:2018-10-09 16:01:27

标签: apache .htaccess mod-rewrite virtualhost httpd.conf

所以我有一个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放到VirtualHost配置的DocumentRoot中,而不会让Apache随便吐出来:

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

1 个答案:

答案 0 :(得分:1)

我认为您想要的不是实际的重定向,而是另一种重写。

您不能单独使用VirtualHost。好吧,如果您将其指向相同的DocumentRoot,并且可以复制规则或通过.htaccessInclude指令从公共文件加载它们,则可以。

您还可以将短域名添加到您的主域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

然后您现有的规则应接听。如果您想避免域名缩短而无法响应较长的网址,则可以在现有规则中添加类似的RewriteCond

RewriteCond %{HTTP_HOST} !ex.com