添加额外的 Apache2 重写而无需无限重定向

Posted

技术标签:

【中文标题】添加额外的 Apache2 重写而无需无限重定向【英文标题】:Adding additional Apache2 rewrites without infinite redirect 【发布时间】:2021-12-20 02:12:25 【问题描述】:

我目前在.htaccess 文件中有以下内容来重写.php 扩展:

# /var/www/html/help/.htaccess

# To externally redirect /dir/foo.php to /dir/foo excluding POST requests
RewriteCond %REQUEST_METHOD !POST
RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,NE]

# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^ %REQUEST_URI.php [L]

按预期工作。但是我希望添加一些额外的重写,例如将/help/open 重定向到/help/submit。我尝试的一切似乎都以来自 /help/open -> /help/submit 并返回的无限重定向结束。

RewriteRule open.php /help/submit [R=302,NE,L]
RewriteRule submit /help/open.php [L]

有人可以建议我如何在此处实现额外的 URL 重写而不导致无限循环吗?

【问题讨论】:

【参考方案1】:

您收到无限循环错误,因为您的规则将目标文件 help/open.php 重定向到自身。您可以在第二条规则中使用END 标志来解决此问题。

RewriteRule open.php /help/submit [R=302,NE,L]
RewriteRule submit /help/open.php [END]

注意:END 标志仅适用于 Apache 2.4 或更高版本。如果您使用的是旧版本的 Apache,请改用以下解决方案

RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteRule open.php /help/submit [R=302,NE,L]
RewriteRule submit /help/open.php [L]

【讨论】:

以上是关于添加额外的 Apache2 重写而无需无限重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache 2.4 中重定向 /path/variables/ 以重写为 /index.php/path/variables/?

播放后重定向html5视频

apache2 忽略默认主机并始终重定向到域,即使使用 IP

如何停止重定向循环? Ubuntu 上的 Apache2

重写规则不起作用 - 返回目录列表而不是重定向

Apache 2.4 将本地虚拟主机重定向到 https 而不是 http