2012-10-29 26 views
10

Tôi có các quy tắc viết lại htaccess sau đây. Tình trạng một quy tắc để ngăn chặn vòng lặp ban đầu được viết theo cách này:Apache mod_rewrite REDIRECT_STATUS điều kiện gây ra danh sách thư mục

RewriteCond %{ENV:REDIRECT_STATUS} ^. 

Nó dùng để chỉ làm việc tốt, cho đến khi nó đột nhiên ngừng làm việc gây Apache để hiển thị danh sách thư mục của trang web.

tôi đã phải thay đổi nó để hình thức mới này, như trong danh sách dưới đây, để có nó hoạt động trở lại:

RewriteCond %{ENV:REDIRECT_STATUS} 200 

Bạn có bất cứ ý tưởng về lý do của hành vi này?

Cảm ơn bạn

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] 
+0

Bạn đã bao giờ nhận được câu trả lời cho điều này chưa? – anubhava

+0

thực sự không: (không xấu miễn là nó hoạt động tốt, vẫn còn tôi đã có thể thích hiểu lý do :) – Timido

Trả lời

8

Bạn có điều kiện này để ngăn chặn vòng lặp:

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

này hoạt động bằng cách kiểm tra nội bộ Apache biến %{ENV:REDIRECT_STATUS}. Biến này trống khi bắt đầu mô-đun viết lại nhưng được đặt thành 200 khi lần viết nội bộ thành công đầu tiên xảy ra. Điều kiện trên nói rằng bảo lãnh được viết lại sau khi viết lại thành công đầu tiên và dừng vòng lặp.

+0

Làm thế nào là nó khác với một trong tôi đã có lúc bắt đầu? đó là: 'RewriteCond% {ENV: REDIRECT_STATUS}^.' – Timido

+0

Xem điều kiện của bạn' RewriteCond% {ENV: REDIRECT_STATUS}^.' sẽ khớp với bất cứ khi nào '% {ENV: REDIRECT_STATUS}' không trống, mà không đảm bảo nó là 200 (thành công). – anubhava

+0

'% {ENV: REDIRECT_STATUS}' được đặt cho các trường hợp khác cũng như bởi mod_dir, ErrorDocument, v.v. – anubhava

Các vấn đề liên quan