将mysub.mydomain.com/uploads/*重写为mysub.mydomain / mysub / uploads / *

时间:2016-12-28 22:20:17

标签: .htaccess mod-rewrite

我在使用RewriteCond和RewriteRule时遇到了麻烦。我想重写一个形式的网址:

http://mysub.mydomain.com/uploads/image.png

http://mysub.mydomain.com/mysub/uploads/image.png

这样我的AliasMatch:

AliasMatch "^/(.+)/uploads/(.*)$" "/var/www/html/test/client_files/$1/uploads/$2"

会将请求定向到正确的资源。

这是我到目前为止所做的:

RewriteEngine On
RewriteCond %{HTTP_HOST}                   ^[^.]+\.mydomain\.com$ [NC]
RewriteCond %{REQUEST_URI}                 ^uploads/(.*)$
RewriteRule ^(.+)                          %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.mydomain\.com(.*)    %{HTTP_HOST}$1/$2 [L]

然而它不起作用。我收到消息说没有找到请求的网址。任何人都可以告诉我如何纠正我正在做的重写问题吗?

更新#1 我在我的httpd.conf文件中的虚拟主机中使用它。我根据@ user2493235答案得到以下工作,但重写后我的AliasMatch没有被应用。它只是将文档根添加到重写的uri。

RewriteCond %{HTTP_HOST}        ^([^.]+)\.mydomain\.com$
RewriteRule ^(\/uploads\/.*)$     /%1$1

我尝试了各种版本的AliasMatch,甚至将其更改为Alias。在重写之后似乎没有处理AliasMatch。

1 个答案:

答案 0 :(得分:1)

这应该这样做:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule ^(/uploads/.+)$ /%1$1 [PT]