Tôi cần phải thay đổi của tôi .htaccess
và có hai dòng mà tôi không hiểu.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Khi nào tôi nên sử dụng những dòng này?
Tôi cần phải thay đổi của tôi .htaccess
và có hai dòng mà tôi không hiểu.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Khi nào tôi nên sử dụng những dòng này?
Câu trả lời:
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 !-l
dẫ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, -l
có 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=$1
có nghĩa là một yêu cầu olle
sẽ được viết lại như index.php?url=olle
).
QSA
có 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=1
sẽ đượ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.
?
để &
, làm cho nó không thể phân biệt giữa /page&foobar
vs /page?foobar
. Làm cách nào để ngăn QSA thay thế ?
thành &
?
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]
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