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

Apache: Using VirtualHost redirect to URL with RewriteCond applied?

所以我有一个 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= [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”实际上并不存在(因为它正在被重写),我似乎无法在没有 Apache 吐回的情况下将 /var/www/html/artist 放入 VirtualHost 配置的 DocumentRoot 中:

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

我认为你想要的不是真正的重定向,而是另一个重写。

你不能用单独的 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/

那么您现有的规则应该会生效。如果您想避免缩短的域名响应较长的网址,您可以在现有规则中添加类似的 RewriteCond

RewriteCond %{HTTP_HOST} !ex.com