为什么mod_rewrite将var/www/html添加到生成的网址中



我正在尝试使我的服务向后兼容,因为我已在内部将服务移动到新路径,我仍然希望用户使用旧网址访问它,因为并非所有人都知道此更改。

如果我在重写规则的末尾添加 [R] 标志,我可以完成我想要的,但它重定向了客户端的 url,这是我不想要的。

我的重写代码:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^/old-path(.*)$ /new-path/$ [L]
</IfModule>

尽管此规则会产生以下 url:

/

var/www/html/new-path

示例请求如下所示:

https://host-name/old-path/param1/param2/param3/param4

重写规则应该只是用新路径替换旧路径。

谁能给我一些线索,说明我做错了什么? 我该如何解决它?

提前感谢!

如果您

的目标是"隐藏"重写,请尝试以下操作:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^/old-path/(.*)$ /new-path/$1 [P,L]
</IfModule>

如果您真的想提取主机名:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} (.*)
  RewriteRule ^/old-path/(.*)$ http://%1/new-path/$1 [P,L]
</IfModule>

由于 %1 引用了重写康德行的第一个括号...如果您希望将客户重写为新的 URI,并看到:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^/old-path/(.*)$ https://host-name/new-path/$1 [R=301,L]
</IfModule>

或者简而言之,甚至不使用重写:

RedirectMatch ^/old-path/(.*)$ /new-path/$1

为避免"https://host-name/",请将 DocumentRoot 更改为"old-path"的父目录,尤其是"new-path"。

最新更新