2012-03-09 42 views
6

Tôi gặp sự cố khi tôi cần chuyển hướng 4 trang cụ thể trên trang web của tôi đến các phiên bản bảo mật https của chúng.htaccess chuyển hướng 4 trang cụ thể đến https

Tôi hiện đang có một tập tin htaccess được chuyển hướng cả example.comwww.example.com để https://example.com

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(.*\.)*example.com$ [NC] 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://example.com/$1 [R] 

những gì tôi cần là một cái gì đó giống như

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(.*\.)*example.com/page1.php$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*\.)*example.com/page2.php$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*\.)*example.com/page3.php$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*\.)*example.com/page4.php$ [NC] 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://example.com/page1.php$1 [R] 
RewriteRule ^(.*)$ https://example.com/page2.php$1 [R] 
RewriteRule ^(.*)$ https://example.com/page3.php$1 [R] 
RewriteRule ^(.*)$ https://example.com/page4.php$1 [R] 

Chú ý rằng tôi đã gỡ bỏ dòng RewriteCond thứ ba từ ở trên mã như tôi không muốn mỗi trang trên trang web của tôi để được hiển thị https chỉ các trang tôi đặc biệt nhà nước.

Tôi làm cách nào để giải quyết vấn đề này?

PS cũng có phải là dòng này bao gồm cả www.example.com và example.com không?

RewriteCond %{HTTP_HOST} ^(.*\.)*example.com$ [NC] 

Tôi giả định rằng

^(.*\.)* 

có một cái gì đó làm gì với nó?

Trả lời

11
Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

#redirect www.mydomain.com to mydomain.com (or any other subdomain) 
RewriteCond %{HTTP_HOST} !^mydomain.com$ [NC] 
RewriteRule ^(.*)$ http://mydomain.com/$1 [L,R=301] 

#force https for certain pages  
RewriteCond %{HTTPS} !=on 
RewriteRule ^(page1\.php|page2\.php|page3\.php|page4\.php)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R] 
+0

Cảm ơn bạn rất nhiều Gerben, hoạt động hoàn hảo !!!! –

4

Tôi đã sửa đổi và xóa mã của bạn. Bạn có thể sử dụng mã này trong tập tin .htaccess của bạn trong $ DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# HTTPS is not already on 
RewriteCond %{HTTPS} !=on 
# Redirect to HTTPS is URI is page1.php OR page2.php OR page3.php OR page4.php 
RewriteRule ^page[1234]\.php$ https://mydomain.com%{REQUEST_URI} [L,R] 
+0

Cảm ơn trả lời anubhava của bạn, tôi đã không cố gắng trả lời của bạn nhưng có vẻ như ti sẽ làm việc. Lý do duy nhất tôi không thử đầu tiên của bạn là có vẻ như bạn đang sử dụng một số loại mảng cho page1.php, page2.php, v.v. Vấn đề với cách làm đó là tôi không thể chèn riêng tên trang, ví dụ: các trang của tôi không thực sự được gọi là page1, page2, v.v. Tôi chỉ sử dụng chúng để đơn giản. Và tiếc là tôi không biết đủ về viết lại để thay đổi nó. Dù sao lại cảm ơn bạn đã trả lời. –

+1

'[1234]' không phải là một mảng nhưng cách regex để nói một trong 1 hoặc 2 hoặc 3 hoặc 4. Tôi đã sử dụng: 'RewriteRule^(page1 | page2 | page3 | page4) \. Php $ https: //% {HTTP_HOST}% {REQUEST_URI} [L, R] 'Dù sao tôi nghĩ bạn đã chấp nhận câu trả lời đúng như @Gerben trả lời đầu tiên và trả lời đúng :) – anubhava

Các vấn đề liên quan