Apache 重定向,重写规则中不包含文档根目录

Apache 重定向,重写规则中不包含文档根目录

我有这个工作规则:

RewriteRule ^(.*)/amp/$ https://example.com/$1?amp=1 [QSA,R=301,NC,NE,L]

用于重定向https://example.com/register/amp/https://example.com/register?amp=1

而且它运行良好,但我希望浏览器中的 URL 没有改变,这样它会加载register?amp=1,但在浏览器中仍然显示/register/amp/

为了实现此行为,我尝试修改为:

RewriteRule ^(.*)/amp/$ ./app.php/$1?amp=1 [QSA,R=301,NC,NE,L]

但随后它会重定向到https://example.com/home/user/public_html/register?amp=1

因此,它错误地添加了文档根目录,我不知道如何修改规则来实现这一点。

答案1

RewriteRule ^(.*)/amp/$ ./app.php/$1?amp=1 [QSA,R=301,NC,NE,L]

您需要删除R(外部“重定向”)标志./代换字符串在这里也是多余的,只是增加了操作系统必须优化的复杂性。

指定相对路径时代换在目录上下文中(.htaccess<Directory>服务器配置中的容器中),并且您没有使用指令声明替代前缀(或“基本”目录)RewriteBase,那么 Apache 会在重写过程结束时重新添加目录前缀(即/home/user/public_html/本例中)。这是因为这是一个外部重定向,所以您在格式错误的重定向中公开了这个目录前缀。您需要进行内部重写。

例如:

RewriteRule ^(.*)/amp/$ app.php/$1?amp=1 [QSA,NC,NE,L]

然而,你也包括app.php代换,你没有在目标网址中显示?(app.php可能正确 - 你应该重写为实际的文件系统路径并且不依赖于 mod_dir 的任何额外重写或子请求。)

相关内容