我在使用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。
答案 0 :(得分:1)
这应该这样做:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule ^(/uploads/.+)$ /%1$1 [PT]