Đây là tập tin .htaccess của tôi:.htaccess - ngừng xử lý nếu viết lại đúng không?
Options +FollowSymlinks
RewriteEngine on
Rewritecond %{http_host} ^mysite.com [nc]
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /404.php
Khối RewriteCond/RewriteRule 1 là để chuyển hướng người dùng đến www nếu họ bước vào địa chỉ không có www.
Khối rewritecond/rewriterule thứ hai là chuyển hướng người dùng đến trang mà tôi đã tạo nếu họ nhập địa chỉ không tồn tại.
Mỗi quy tắc hoạt động trên riêng của mình:
Nếu tập tin .htaccess của tôi chỉ chứa khối đầu tiên, sau đó nó chuyển hướng thành công địa chỉ không www đến địa chỉ www.
Và nếu một địa chỉ không tồn tại được nhập, người dùng sẽ được chuyển hướng thành công đến trang 404.php của tôi.
Tuy nhiên, nếu tập tin .htaccess chứa cả khối, và một địa chỉ không www được nhập vào, sau đó thay vì một chuyển hướng thành công đến địa chỉ www, sau đây sẽ xảy ra:
(1) Sau đây là hiển thị trên trang:
Đã di chuyển vĩnh viễn
Tài liệu đã chuyển đến đây.
Ngoài ra, gặp phải lỗi Lỗi máy chủ nội bộ 500 trong khi cố gắng sử dụng ErrorDocument để xử lý yêu cầu.
Apache/1.3.41 Server tại mysite.com Cảng 80
(2) Các mục sau đây được tạo ra trong các bản ghi lỗi:
[Fri 04 tháng năm 01:54:19 2012] [lỗi ] [khách hàng 109.109.109.109] mod_rewrite: số lượng chuyển hướng nội bộ tối đa đã đạt được. Giả sử lỗi cấu hình. Sử dụng 'RewriteOptions MaxRedirects' để tăng giới hạn nếu cần thiết.
Tôi cho rằng điều xảy ra là vòng lặp vô hạn bằng cách nào đó đang được tạo.
Tôi tự hỏi liệu có nên cho tệp .htaccess ngừng xử lý lệnh nếu điều kiện đầu tiên đã được đáp ứng hay không sẽ giải quyết được sự cố. Vì vậy, không ai biết làm thế nào để làm điều này?
(Side lưu ý. Nói chung, tôi tìm thấy những tài liệu hiện có trên .htaccess để được hoàn toàn khủng khiếp. Tôi tự hỏi, nếu bất cứ ai khác cảm thấy tương tự.)
Cảm ơn trước.
Tôi nghe theo lời khuyên của bạn, do sự thay đổi duy nhất tập tin của tôi là viết lại đầu tiên quy tắc có những điều sau đây: 'Rewriterule^(. *) $ http://www.mysite.com/$1 [r = 301, nc, L]' Và mọi thứ có vẻ hoạt động chính xác ngay bây giờ. Cảm ơn bạn. – oyvey
Không cần phải lặp lại trang web. Và: Apache RewriteRules được tham lam theo mặc định. ☞ 'RewriteRule (. *) $ 1 [R = 404, L]' –