ubuntu URL重写以根据关键字更改URL的特定部分

bf1o4zei  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(149)

每当有这样的请求发送到服务器时

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}
roejwanj

roejwanj1#

RewriteCond %{REQUEST_URI} ^/(.*)services/?$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/appLegacy/

这将302(临时)重定向任何以servicesservices/结尾的URL到https://<hostname>/appLegacy/,丢失尾部的<accounturi>/services部分。
你也没有在URL路径的开头检查/app?(这让我认为你的.htaccess文件在/app子目录中?但没有其他建议。)
如果.htaccess文件位于/app子目录中,则规则应该如下所示:

RewriteRule ^([^/]+/services)/?$ /appLegacy/$1 [R=302,L]

我假设URL路径的动态accounturi部分由单个路径段组成(如您的示例所示)。
前面的RewriteCond指令不是必需的。$1反向引用包含从RewriteRulepattern 捕获的URL路径(这不包括可能出现在请求中的任何可选的尾随斜杠)。请注意,由于.htaccess文件位于/app子目录中,因此它被排除在捕获的URL路径之外。
你不需要指定一个绝对的URL作为目标,因为你似乎重定向到同一个 * 主机 *。但是,你可以选择包括它以强制HTTPS。
但是,如果.htaccess文件在文档根目录中,则该指令需要像这样,并显式检查/app子目录:

RewriteRule ^app/([^/]+/services)/?$ /appLegacy/$1 [R=302,L]

更新:

我想重写不重定向。我直接提到这在默认配置页
如果此规则直接在<VirtualHost: *:443>中使用(根据您的更新),则需要按如下方式调整规则:

RewriteRule ^/app/([^/]+/services)/?$ /appLegacy/$1 [L]

注意RewriteRulepattern 上的斜杠前缀,因为在 virtualhost 上下文中,RewriteRulepattern 匹配完整的根相对URL路径。
这在内部重写请求,而不是重定向。

  • 旁白:*

我已经在〈VirtualHost *:80〉下面启用了HTTPS重定向

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

你不需要在这里使用mod_rewrite。一个简单的mod_alias Redirect就足够了,而且效率更高。这应该是一个301(永久)重定向,而不是默认的302(临时)重定向。例如:

Redirect 301 / https://example.com/

但是,您需要在规则中硬编码规范主机名。

相关问题