Tôi đã có một ứng dụng web tomcat 6 chạy với httpd apache làm giao diện người dùng. Tôi đang sử dụng mod_proxy và mod_proxy_ajp để chuyển tiếp các yêu cầu đến tomcat. Máy chủ của tôi đang chạy ubuntu. Bây giờ tôi đang cố gắng sử dụng mod_rewrite để xóa www hàng đầu, để url trang web chuẩn của tôi là http://domain.com thay vì http://www.domain.comLàm cách nào để khắc phục sự cố tại sao quy tắc viết lại của tôi không được apache áp dụng?
Tôi đã đọc một số hướng dẫn về cách sử dụng mod_rewrite, nhưng tôi không thể viết lại bất kỳ công việc. Tôi đã thử đặt quy tắc viết lại trong một tập tin .htaccess (sau khi sửa đổi/etc/apache/sites-available/tập tin mặc định của tôi để thiết lập AllowOverride tất cả). Tôi đã thử đặt quy tắc viết lại trong apache2.conf, httpd.conf và rewrite.conf. Tôi đã thử tất cả những điều này với ghi nhật ký ghi lại được bật. Tệp nhật ký được tạo, nhưng apache đã không viết gì cho nó. Tôi nghĩ rằng có lẽ mod_proxy bằng cách nào đó ngăn chặn các quy tắc viết lại đang được sử dụng, vì vậy tôi đã cố gắng vô hiệu hóa điều đó ... và tôi vẫn không được viết lại, và không có gì để đăng nhập.
Tại thời điểm này, tôi hoàn toàn không biết phải cố gắng làm gì tiếp theo. Làm thế nào để tôi đi về xử lý sự cố tại sao apache không sử dụng quy tắc viết lại của tôi?
Để tham khảo, đây là chỉ thị viết lại tôi:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
</IfModule>
Sửa: các câu trả lời dưới đây là hữu ích cho trường hợp cụ thể của tôi, nhưng có lẽ không phải là hữu ích cho cộng đồng-at-lớn như câu trả lời về cách bạn gỡ rối các chỉ thị apache nói chung. Ví dụ, có cách nào để cho phép đăng nhập vào điểm mà nó sẽ cho tôi biết chỉ thị nào đang được áp dụng theo thứ tự như yêu cầu đến không?
Chỉnh sửa 2: Tôi đã có những thứ để làm việc ngay bây giờ. Máy chủ ảo của tôi không được thiết lập đúng, và tôi cũng không hoàn toàn có quyền viết lại regex. Dưới đây là các chỉ thị viết lại cuối cùng tôi đã đi làm:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com$1 [L,R=301]
</IfModule>
Bạn đã chắc chắn rằng mod_rewrite được tải? –
Có. Tôi tải nó bằng cách sử dụng "a2enmod rewrite", thiết lập một liên kết tượng trưng trong mods-enabled để trỏ tới mod \ _rewrite.load trong mod-available. Tôi cũng đã cố gắng cố tình viết sai chính tả một trong các quy tắc viết lại (tức là "Rewrite3Rule") để kiểm tra rằng các quy tắc đang thực sự được apache chọn, và apache cho tôi một thông báo lỗi như tôi mong đợi. Khi tôi sửa chữa chính tả và khởi động lại apache nó khởi động lại tốt. –