我正在努力使我的服务向后兼容,因为我已经将服务移动到一个新的路径internaly,我仍然希望用户使用旧的URL访问它,因为并非所有人都知道这个更改。
如果我在重写规则的末尾添加[R]标志但是它会重定向客户端的网址,我可以完成我想要的工作,这是我不想要的。
我的重写代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/old-path(.*)$ /new-path/$ [L]
</IfModule>
虽然此规则会产生以下网址:
的/ var / www / html等/新路径
示例请求类似于:
和重写规则应该只用新路径替换旧路径。
任何人都可以给我一些关于我做错的线索吗?我该如何解决?
提前致谢!
答案 0 :(得分:1)
如果你的目标是隐藏&#39;重写,试试这个:
<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引用了RewriteCond-line的第一个括号... 如果您希望将客户重写为新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
避免&#39; https://host-name/&#39;将您的DocumentRoot更改为&#39; old-path&#39;的父目录特别是&#39; new-path&#39;。