2012-02-20 9 views
20

Tôi đang cố gắng để chuyển hướng file index.php vào/root, tôi đã tìm kiếm xung quanh và tìm thấy một số đoạn mã tương tự như:htaccess redirect index.php để root (bao gồm cả tên miền phụ)

RewriteCond %{THE_REQUEST} ^.*/index.php 
RewriteRule ^(.*)index.php$ http://www.domain.com/$1 [R=301,L] 

tuy nhiên điều này sẽ không làm việc cho tên miền phụ, ví dụ dưới đây:

  1. tôi có một tên miền phụ: subdomain.domain.com
  2. một người dùng truy cập http://subdomain.domain.com/index.php
  3. sử dụng htaccess trên họ một đang chuyển hướng đến http://www.domain.com/ hơn http://subdomain.domain.com/

Có ai biết làm thế nào để điều chỉnh htaccess trên vì vậy nó sẽ đưa vào tài khoản các tên miền phụ và chuyển hướng họ đến vị trí thích hợp?

ví dụ: nếu người dùng truy cập http://subdomain.domain.com/index.php họ sẽ đi đến http://subdomain.domain.com/

Bonus Points:

Có htaccess mà chỉ có thể áp dụng quy tắc này cho tất cả các thư mục?

Vì vậy, đối với bất kỳ thư mục nào có index.php, chúng sẽ chỉ được chuyển hướng đến thư mục gốc, ví dụ: http://subdomain.domain.com/folder1/folder2/index.php sẽ tự động đi đến http://subdomain.domain.com/folder1/folder2/

+0

tôi, cho một, thực sự mong đến ngày khi mọi người nhận ra những gì một sự lãng phí khổng lồ thời gian này là, ngừng làm việc đó và quay trở lại để giải quyết các vấn đề thực tế thực sự. Cái gọi là "chuyên gia SEO" đã bị lãng phí tổng cộng ** hàng triệu ** giờ của thời đại chúng ta. –

Trả lời

62

Làm điều này:

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L] 
+1

Điều này làm việc tuyệt vời, cảm ơn! Đối với bất kỳ ai có cùng một vấn đề, nếu bạn có một tên miền phụ, bạn có thể buộc phải chọn một thư mục để nó nằm, đảm bảo bạn tạo/chọn một thư mục ngoài public_html hoặc htaccess này sẽ thử và chuyển hướng đến thư mục đó. ví dụ. tôi có subdomain.domain.com có ​​các tệp được lưu trữ trong www.domain.com/subdomain, htaccess này sẽ gửi người dùng đến subdomain.domain.com/subdomain bất cứ khi nào họ truy cập subdomain.domain.com/index.php nhưng nếu bạn đặt thư mục bên ngoài public_html bạn không gặp phải vấn đề này. – Alex

+0

@ThinkingMonkey Bạn có thể sửa dấu chấm trong regex 'index.php' không? Tôi tin rằng bạn định viết 'index \ .php' :) – caiosm1005

+0

@ caiosm1005 bạn nói đúng. Đã sửa. – ThinkingMonkey

7

tôi dựa đoạn mã sau vào @ThinkingMonkey's answer

RewriteRule ^(.*)index\.(php|html?)$ /$1 [R=301,NC,L] 

Nó chuyển hướng URI kết thúc với index.php, index.htm hoặc index.html đến / . Làm việc với thư mục con, quá.

Ngoài ra, hãy chú ý cờ NC. Nó làm cho nó không phân biệt chữ hoa chữ thường. Vì vậy, nó hoạt động ngay cả khi URI ở trên trường hợp như INDEX.PHP.

-1

có thể được sử dụng

RewriteRule ^index\.php/(.*)$ http://www.example.com/$1 [R=301,L] 
+0

Điều đó chắc chắn dường như ngược lại với những gì được yêu cầu. –

+0

Đây là giải pháp tốt nhất. Các tác phẩm khác chỉ khi bạn có domain.ext/index.php nhưng không hoạt động với doamin.ext/index.php/some_argument/-> domain.ext/some_argument /. –

-1
RewriteCond %{THE_REQUEST} ^.*/index\.(php|html?) [NC] 
RewriteRule ^(.*)index.(php|html?)$ /$1 [R=301,NC,L] 

phiên bản này của tôi dựa trên ThinkingMonkey và caiosm1005 câu trả lời :)