2010-03-02 65 views
12

Tôi đang sử dụng những điều sau đây để thử và loại bỏ WWW từ url:Làm cách nào để xóa WWW khỏi url bằng mod_rewrite?

RewriteCond %{HTTP_HOST} ^example.com$ [NC] 
RewriteRule (.*) http://example.com$1 [R=301] 

Nhưng đối với một số lý do nó không hoạt động. Bất kỳ đề xuất?

Trả lời

19

Hãy thử:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 

Và không mod_rewrite:

<VirtualHost 10.0.0.1:80> 
     ServerName www.example.com 
     Redirect permanent/http://example.com/ 
</VirtualHost> 

host ảo có thể được sử dụng bằng cách hoàn thành các bước trong URL sau: Setting Up A Virtual Host in Apache.

+0

Đây là những gì đã xảy ra: Trang web tại http://www.example.com/ đã dẫn đến quá nhiều chuyển hướng. Xóa cookie của bạn cho trang web này hoặc cho phép cookie của bên thứ ba có thể khắc phục được sự cố. Nếu không, nó có thể là một vấn đề cấu hình máy chủ và không phải là một vấn đề với máy tính của bạn. * Tôi đã xóa những trang này nhưng trang web vẫn chưa hoạt động! Tại sao vậy? * – Yeti

+0

Câu hỏi 1. Bạn có sử dụng cả hai cùng một lúc? Câu hỏi 2. Bạn có thay đổi địa chỉ IP thành giá trị chính xác không? Câu hỏi 3. Bạn có sở hữu example.com không? –

+1

+1 cho phương pháp tiếp cận ảo. Đừng sử dụng mod_rewrite cho đến khi bạn thực sự cần. – bobince

37

Dưới đây là một giải pháp tổng quát hơn:

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC] 
RewriteRule^http://%1%{REQUEST_URI} [L,R=301] 
+3

Có cách nào để phát hiện và ghi đè lên cùng một lược đồ URL (http hoặc https) mà từ đó người dùng đến không? 'http: // www.example.com /' đến 'http: // example.com /' và 'https: // www.example.com /' đến 'https: // example.com'. –

+0

REQUEST_URI có chứa index.php không? Vì một số lý do khi tôi truy cập www.example.com, nó chuyển hướng đến www.example.com/index.php – CMCDragonkai

+0

@CMCDragonkai Đừng quên cờ QSA nếu bạn muốn nối thêm chuỗi truy vấn ban đầu. – jordanbtucker

8

Là một tinh chỉnh nhỏ của câu trả lời của Kyle, tôi muốn đặt một/trong điều kiện phù hợp RewriteRule, như

RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteRule ^/(.*)$ http://example.com/$1 [R=301,L] 

Nếu không, bạn sẽ có được một tăng gấp đôi là kết quả.

http://www.example.com/smth -> http://example.com//smth 
+0

chính xác những gì tôi đang tìm kiếm. – NilsB

4

Tôi sẽ luôn sử dụng 307 (chuyển hướng tạm thời) trước vì nếu bạn làm sai trình duyệt cache một số vĩnh viễn. Tôi đã kết thúc quá trình cài đặt Google Chrome chỉ vì tôi không thể khiến Firefox của mình quên chuyển hướng xấu ngay cả khi tôi đã xóa toàn bộ bộ nhớ cache.

2

Đây là giải pháp nếu bạn không muốn một tên miền được mã hóa cứng. Đừng quên bắt đầu công cụ viết lại hoặc điều này sẽ không hoạt động!

# Start rewrite engine 
<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    RewriteEngine On 
</IfModule> 

# Rewrite "www.example.com -> example.com" 
<IfModule mod_rewrite.c> 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule^http://%1%{REQUEST_URI} [R=301,L] 
</IfModule> 
Các vấn đề liên quan