首页 > 解决方案 > 添加额外的 Apache2 重写而不进行无限重定向

问题描述

我目前在.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 重写而不导致无限循环吗?

标签: php.htaccessmod-rewriteurl-rewritingapache2

解决方案


您收到无限循环错误,因为您的规则将目标文件重定向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]

推荐阅读