Làm thế nào tôi có thể thực thi rằng các url của tôi luôn bắt đầu bằng www?


17

Tôi muốn đảm bảo rằng người dùng đến www.mydomain.comngay cả khi họ đến thông qua bí danh mydomain.com. Điều này là để tôi có quyền kiểm soát cookie trên các tên miền phụ và để Google thấy một tên miền duy nhất chứ không phải là một địa chỉ URL.

Làm thế nào tôi có thể làm điều này với apache?


5
Tôi có thể đề nghị bạn thay vì đảo ngược điều này và thay vào đó thực thi mydomain.com không? Tiền tố 'www' là dư thừa và hoàn toàn không cần thiết.
Eevee

Cookie được gửi đến tất cả các tên miền phụ trên mydomain.com, trong khi tôi có thể tự quyết định cookie nào được tải từ đâu với www.mydomain.com .. Chẳng hạn, tôi có thể tránh thêm cookie vào static.mydomain.com, để cookie phát sinh Được truyền cho mọi hình ảnh được tải. Nó chắc chắn không cần thiết.
Magnar

Bạn có thể đặc biệt bảo Google sử dụng một kiểu liên kết duy nhất. Xem câu trả lời của tôi dưới đây.
Robinicks

Tôi không có đại diện, nhưng thêm các thẻ này sẽ rất hữu ích: redirect redirectmatch mod_alias
Tom

1
Mặc dù điều này muộn hơn nhiều , nhưng nó vẫn có liên quan. www không bị phản đối, bởi vì một tên miền không có tên miền phụ có một số nhược điểm. Xem yes-www.org/why-use-www để biết nhiều lý do để sử dụng www.
user50849

Câu trả lời:


17
<VirtualHost ip:80>
   ServerName domain.com
   RedirectMatch permanent ^(.*)$ http://www.domain.com$1
</VirtualHost>

<VirtualHost ip:80>
   ServerName www.domain.com

   ... usual config
</VirtualHost>

7
Đối với một giải pháp đơn giản hơn một chút, bạn có thể: "Chuyển hướng vĩnh viễn / ptth: //www.domain.com/" và apache sẽ tự động giữ nguyên hậu tố. (Tôi đã đảo ngược http để vô hiệu hóa chế độ tự động.)
Greg Hewgill

1
Có thật không ? Ngọt ngào, tôi không bao giờ biết điều đó. Tôi luôn nghĩ rằng bạn phải sử dụng RedirectMatch để bảo vệ các phần đuôi của URI
Dave Cheney

4

Thêm phần này vào httpd.conftập tin của bạn :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]

4

Kích hoạt hỗ trợ mod_rewrite sau đó tạo tệp .htaccess trong thư mục gốc cho tên miền của bạn với nội dung sau:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} ^domain\.com$
   RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>

đừng quên làm cho trường hợp kiểm tra RewriteCond không nhạy cảm ...
Alnitak

Chỉ làm điều này nếu bạn không có quyền truy cập để thay đổi tệp cấu hình apache vì một số lý do. .htaccesscác tập tin có rất nhiều chi phí, và viết lại bên trong chúng làm cho nó tồi tệ hơn nhiều.
John Dalton

sử dụng Redirect luôn thích hợp hơn sử dụng mod_rewrite cho tác vụ này.
David Pashley

3

Nếu bạn thực sự muốn Google sử dụng một kiểu miền cụ thể (có hoặc không có www ) thì hãy tạo tài khoản Google Webmaster Tools miễn phí , xác minh quyền sở hữu tên miền của bạn (tải lên tệp) và đặt tên miền ưa thích của bạn bằng bảng điều khiển trực tuyến.

Thật đơn giản và bạn không cần thay đổi bất kỳ mã phía máy chủ nào, các liên kết bên trong có hoặc không có www sẽ được xử lý giống như tăng PageRank của các trang của bạn.

Liên kết có thể trỏ đến trang web của bạn bằng cả hai phiên bản www và không phải www của URL (ví dụ : http://www.example.comhttp://example.com ). Tên miền ưa thích là phiên bản mà bạn muốn sử dụng cho trang web của mình trong kết quả tìm kiếm .

Khi bạn cho chúng tôi biết tên miền ưa thích của bạn, chúng tôi sẽ tính đến sở thích của bạn khi hiển thị các URL. Có thể mất một thời gian trước khi bạn thấy thay đổi này được phản ánh đầy đủ trong chỉ mục của chúng tôi.

Nếu bạn không chỉ định tên miền ưa thích, chúng tôi có thể coi phiên bản www và không www của tên miền là tham chiếu riêng cho các trang riêng biệt.


1

Tôi gặp vấn đề ngược lại, mọi người sẽ truy cập www.domain.com khi tôi chỉ muốn phục vụ trực tiếp từ domain.com:

<VirtualHost *:80>
   ServerName domain.com

   ... usual config
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain.com
   ServerAlias sub.domain.com # can also catch some other subdomains
   ServerAlias *.domain.com # or all previously unmatched domains

   Redirect permanent / http://domain.com/
</VirtualHost>

Như Greg Hewgill đã đề cập, sử dụng Redirect đơn giản hơn RedirectMatch một chút và thực hiện cùng một công việc, hãy xem http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect để biết thêm chi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.