每当有这样的请求发送到服务器时
https://%{HTTP_HOST}/app/accounturi/services
我想把它重定向到
https://%{HTTP_HOST}/appLegacy/accounturi/services
这里accounturi
将是一个动态的。我正在apache2中尝试这个。
我尝试了下面的方法,并坚持重写规则。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.*)services/?$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/appLegacy/
嘿,很抱歉我把问题搞砸了。我需要重写而不是重定向。
所以用户应该还是可以看到
https://%{HTTP_HOST}/app/accounturi/services
但是请求应该从
https://%{HTTP_HOST}/appLegacy/accounturi/services
请帮助我。我直接在apache2的默认配置下写这个
<VirtualHost *:443>
我已经启用HTTPS重定向到<VirtualHost *:80>
下面
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
1条答案
按热度按时间roejwanj1#
这将302(临时)重定向任何以
services
或services/
结尾的URL到https://<hostname>/appLegacy/
,丢失尾部的<accounturi>/services
部分。你也没有在URL路径的开头检查
/app
?(这让我认为你的.htaccess
文件在/app
子目录中?但没有其他建议。)如果
.htaccess
文件位于/app
子目录中,则规则应该如下所示:我假设URL路径的动态
accounturi
部分由单个路径段组成(如您的示例所示)。前面的
RewriteCond
指令不是必需的。$1
反向引用包含从RewriteRule
pattern 捕获的URL路径(这不包括可能出现在请求中的任何可选的尾随斜杠)。请注意,由于.htaccess
文件位于/app
子目录中,因此它被排除在捕获的URL路径之外。你不需要指定一个绝对的URL作为目标,因为你似乎重定向到同一个 * 主机 *。但是,你可以选择包括它以强制HTTPS。
但是,如果
.htaccess
文件在文档根目录中,则该指令需要像这样,并显式检查/app
子目录:更新:
我想重写不重定向。我直接提到这在默认配置页
如果此规则直接在
<VirtualHost: *:443>
中使用(根据您的更新),则需要按如下方式调整规则:注意
RewriteRule
pattern 上的斜杠前缀,因为在 virtualhost 上下文中,RewriteRule
pattern 匹配完整的根相对URL路径。这在内部重写请求,而不是重定向。
我已经在〈VirtualHost *:80〉下面启用了HTTPS重定向
你不需要在这里使用mod_rewrite。一个简单的mod_alias
Redirect
就足够了,而且效率更高。这应该是一个301(永久)重定向,而不是默认的302(临时)重定向。例如:但是,您需要在规则中硬编码规范主机名。