regex - Apache mod_rewrite REDIRECT_STATUS 条件导致目录列表

标签 regex apache .htaccess mod-rewrite

我有以下 htaccess 重写规则。 防止循环的单规则条件最初是这样写的:

RewriteCond %{ENV:REDIRECT_STATUS} ^.

它曾经工作得很好,直到它突然停止工作,导致 Apache 显示网站的目录列表。

我必须将其更改为新形式,如下面的 list 所示,才能使其再次工作:

RewriteCond %{ENV:REDIRECT_STATUS} 200

您知道这种行为的原因吗?

谢谢

RewriteEngine on
RewriteBase /

## Permanent 301

## Force to www. Un-comment in production.
RewriteCond %{HTTP_HOST} !^www\.myhost\.com [NC]
RewriteRule ^(.*) http://www.myhost.com/$1 [L,R=301]

## Permanent redirect rules for contents

RewriteRule ^argument/programming/?$ tags/programming [NC,L,R=301]

## Internal Redirect Loop Protection
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

## Maintenance page
#RewriteRule (.*) special/maintenance.html

## Specials
RewriteRule special/(.*) special/$1 [NC,L]

## Static resources
RewriteRule ^(.*\.(js|ico|gif|jpg|png|css|rss|xml|htm|html|pdf|zip|gz|txt))$ public/$1 [NC,L]

## Front Controller
RewriteRule ^(.*) public/index.php [NC,L]

最佳答案

您有以下条件可以停止循环:

## Internal Redirect Loop Protection
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

这通过检查内部 Apache 变量 %{ENV:REDIRECT_STATUS} 来实现。该变量在重写模块开始时为空,但在第一次成功的内部重写发生时设置为 200。上述条件表示在第一次成功重写后退出进一步重写并停止循环。

关于regex - Apache mod_rewrite REDIRECT_STATUS 条件导致目录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121297/

相关文章:

regex - .htaccess RewriteRule 保持 URL 结构

.htaccess - 如何隐藏我的网站(共享主机)的目录列表?

javascript - 结合 angularjs 表单字段的两个正则表达式

apache - 如何增加 AWS 工作人员层实例的超时时间?

CENTOS 7 上的 php shell_exec sudo

html - 将 .htaccess 设置为不将文件到达目录

php - font-face 不适用于 .htaccess 文件

r - 如何提取最长的匹配?

javascript - 正则表达式封装不在括号内的内容

javascript - 正则表达式 - "Nothing to repeat"