Tại sao các chuyển hướng .htaccess hoạt động trong http nhưng không phải với https?


10

Tôi có một tệp .htaccess đơn giản hoạt động tuyệt vời trên phiên bản http của trang web nhưng không phải khi tôi truy cập https. Tại sao?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]

Câu trả lời:


20

Không có đủ 100% thông tin ở đây để tiếp tục, nhưng trong thiết lập SSL mặc định thông thường (Red Hat / CentOS / Fedora, v.v.) Virtualhost cho SSL được thiết lập trong thùng chứa riêng của nó. Việc sử dụng mod_rewrite yêu cầu tối thiểu "AllowOverride FileInfo" được đặt trên gốc tài liệu để nó hoạt động.

Kiểm tra cấu hình của bạn để biết SSL (/etc/httpd/conf.d/ssl.conf theo mặc định), đảm bảo rằng nó trông giống như:

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

Mặc định cho AllowOverride là 'Không', vì vậy mọi cài đặt khác (chẳng hạn như 'Tất cả') có thêm khả năng FileInfo đều ổn.

http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride


1
Tôi không thể thấy /etc/httpd/conf.d/ssl.conf trong linux của mình, làm thế nào để tìm thấy nó?
Ashok KS

1
(1) Bạn có thể cần tìm kiếm tệp conf .. Ví dụ: trên một số hệ thống, /etc/apache2/sites-enabled/default-ssl.conf(2) Để cực kỳ rõ ràng, nếu bạn vẫn gặp sự cố, hãy thử AllowOverride Allthay vì AllowOverride FileInfo. Khi bạn làm cho nó hoạt động, bạn có thể đọc AllowOveridetài liệu Apache một cách chi tiết để hạn chế quyền truy cập cụ thể hơn để tối đa hóa bảo mật. (3) Hãy nhớ rằng bạn phải khởi động lại apache để cài đặt có hiệu lực.
SilentSteel

4

Có thể là mod_rewrite không được kích hoạt cho máy chủ HTTPS hoặc .htaccess không được sử dụng?

Kiểm tra các AllowOveridequyền được sử dụng cho trang web thông thường và so sánh với phiên bản SSL, có thể là sự khác biệt. Có lẽ được giới thiệu để cải thiện an ninh, nếu không phải là một tai nạn.

mod_rewrite là bên cạnh thiết yếu mặc dù, vì vậy bất kỳ nhà cung cấp dịch vụ lưu trữ phong nha nào cũng nên giúp sắp xếp việc này.


1

"làm việc trên apache2 + ubfox chính xác"

Một vấn đề tương tự xảy ra với tôi khi tôi đang sử dụng Slim framework và cố gắng loại bỏ index.php cần thiết trong url. ReWrite hoạt động hoàn hảo cho http nhưng đối với https: nó không hiển thị url, điều đó có nghĩa là reWrite không hoạt động.

Sau vài lần thử nghiệm, tôi đã tìm ra giải pháp này:

 cd /etc/apache2/sites-enabled
 sudo vim default-ssl

Thay đổi AllowOverride Không thành Tất cả . Tương tự sudo vim ssl


0

Tôi đã có vấn đề tương tự, đây là những gì làm việc cho tôi.

Trong httpd.conf của bạn, đảm bảo bạn có cả hai:

Tên miền máy chủ.com

ServerAlias ​​www.domain.com

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.