$ 1 [QSA, L] có nghĩa là gì trong tệp .htaccess của tôi?


Câu trả lời:


215

Không phải là nơi để cung cấp một hướng dẫn hoàn chỉnh, nhưng ở đây nó là ngắn gọn;

RewriteCond về cơ bản có nghĩa là "chỉ thực hiện Quy tắc viết lại tiếp theo nếu điều này là đúng". Đường !-ldẫn là điều kiện mà yêu cầu không phải là liên kết ( !có nghĩa là không, -lcó nghĩa là liên kết)

Các RewriteRule về cơ bản có nghĩa là nếu yêu cầu được thực hiện mà các trận đấu ^(.+)$(phù hợp với bất kỳ URL trừ gốc máy chủ), nó sẽ được viết lại như index.php?url=$1có nghĩa là một yêu cầu ollesẽ được viết lại như index.php?url=olle).

QSAcó nghĩa là nếu có một chuỗi truy vấn được chuyển với URL ban đầu, nó sẽ được thêm vào phần ghi lại ( olle?p=1sẽ được viết lại thành index.php?url=olle&p=1.

L có nghĩa là nếu quy tắc phù hợp, không xử lý thêm bất kỳ Quy tắc viết lại nào bên dưới quy tắc này.

Để biết thêm thông tin đầy đủ về điều này, hãy làm theo các liên kết ở trên. Hỗ trợ viết lại có thể hơi khó nắm bắt, nhưng có khá nhiều ví dụ về stackoverflow để học hỏi.


QSA thay thế ?để &, làm cho nó không thể phân biệt giữa /page&foobarvs /page?foobar. Làm cách nào để ngăn QSA thay thế ?thành &?
Pacerier

8

Nếu các điều kiện sau là đúng, hãy viết lại URL:
Nếu tên tệp được yêu cầu không phải là một thư mục,

RewriteCond %{REQUEST_FILENAME} !-d

và nếu tên tệp được yêu cầu không phải là tệp thông thường tồn tại,

RewriteCond %{REQUEST_FILENAME} !-f

và nếu tên tệp được yêu cầu không phải là một liên kết tượng trưng,

RewriteCond %{REQUEST_FILENAME} !-l

sau đó viết lại URL theo cách sau:
Lấy toàn bộ tên tệp yêu cầu và cung cấp nó dưới dạng giá trị của tham số truy vấn "url" cho index.php. Nối bất kỳ chuỗi truy vấn nào từ URL gốc dưới dạng các tham số truy vấn khác (QSA) và dừng xử lý tệp .htaccess này (L).

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Tài liệu Apache #flag_qsa

Một vi dụ khac:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

Với cờ [QSA], một yêu cầu cho

/ pages / 123? one = two

sẽ được ánh xạ tới

/page.php?page=123&one=two


0

Thao tác này sẽ nắm bắt các yêu cầu đối với các tệp như version, releaseREADME.md, v.v., những tệp này sẽ được coi là điểm cuối, nếu được xác định (như trong trường hợp / phát hành) hoặc là "không tìm thấy".

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.