Ngăn thư mục quản trị chuyển hướng bằng quy tắc ghi lại url
Thiết lập bên dưới hoạt động rất tốt nhưng nếu tôi cố gắng truy cập, https://example.com/quotes/wp-adminnó sẽ chuyển hướng tôi đến https://example.com/wp-adminđó không phải là điều tôi muốn xảy ra vì bây giờ tôi không bao giờ có thể đăng nhập vào /quotes/trang web WordPress.
Tôi đã thử thêm điều này vào dấu ngoặc kép .htaccess nhưng không giúp được gì:
RewriteCond %{REQUEST_URI} !^/(wp-admin/.*)$
Tôi cũng đã thử thêm dòng sau vào một .htaccesstệp trong wp-adminthư mục nhưng nó cũng không hoạt động.
RewriteEngine Off
.htaccessTệp gốc :
# Rewrite any URLs that contain a language code prefix to the subdirectory
RewriteRule ^[a-z]{2}/ quotes%{REQUEST_URI} [L]
# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(css|js|png|jpg|webp|gif|svg|ttf|woff2)$ quotes%{REQUEST_URI} [L]
# BEGIN rlrssslReallySimpleSSL rsssl_version[3.3.5]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
/quotes .htaccess tập tin
# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for static resources
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|webp|gif|svg|ttf|woff)$ RewriteRule (.*) /$1 [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /quotes/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /quotes/index.php [L]
</IfModule>
# END WordPress
Trả lời
Tôi đã thử thêm điều này vào dấu ngoặc kép
.htaccessnhưng không giúp được gì:RewriteCond %{REQUEST_URI} !^/(wp-admin/.*)$
Biến REQUEST_URImáy chủ chứa đường dẫn URL đầy đủ, vì vậy điều này phải được /quotes/wp-admin(tức là. Regex !^/quotes/wp-admin- dấu gạch chéo được cố ý bỏ qua). Do đó, ngoại lệ trên sẽ không thành công và chuyển hướng vẫn xảy ra.
Bạn cũng có thể thêm .phpvào danh sách các tiện ích mở rộng cần tránh. Hoặc thậm chí loại trừ bất kỳ yêu cầu nào trông giống như nó có phần mở rộng tệp - giả sử các URL trang của bạn không có "phần mở rộng tệp".
Ví dụ, trong /quotes/.htaccess:
# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for wp-admin and static resources
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/quotes/wp-admin
RewriteCond %{REQUEST_URI} !\.\w{2,4}$ RewriteRule (.*) /$1 [R=302,L]
\.\w{2,4}$- Điều này giả định rằng phần mở rộng tập tin bao gồm một dấu chấm sau từ 2 đến 4 nhân vật trong phạm vi a-z, A-Z, 0-9hoặc _(gạch dưới) và cuối URL-con đường. \wlà một lớp ký tự viết tắt đại diện cho phạm vi ký tự đó.
Bạn cũng có thể thực hiện điều này một bước xa hơn và ngăn chặn bất kỳ yêu cầu nào ánh xạ đến tệp vật lý được chuyển hướng, mặc dù các trường hợp ngoại lệ ở trên đã !^/quotes/wp-admin/và !\.\w{2,4}$nên bắt mọi thứ . Ví dụ:
# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for wp-admin, static resources and any other files
RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^/quotes/wp-admin RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /$1 [R=302,L]
Kiểm tra hệ thống tệp (chẳng hạn như -f) tương đối "đắt tiền", vì vậy tốt nhất nên tránh nếu không thực sự cần thiết.
Tôi cũng đã thử thêm dòng sau vào tệp .htaccess trong thư mục wp-admin nhưng nó cũng không hoạt động.
RewriteEngine Off
Điều này lẽ ra đã hiệu quả - ít nhất là ngăn chặn chuyển hướng được kích hoạt bởi .htaccess. (Mặc dù điều này cũng sẽ ngăn cản mọi việc viết lại, vì vậy có thể không được mong muốn?)
Tuy nhiên, vì đây là chuyển hướng 301 (vĩnh viễn) nên trình duyệt sẽ lưu vào bộ nhớ cache (liên tục). Vì vậy, bạn sẽ cần đảm bảo bộ nhớ cache của trình duyệt được xóa trước khi thử nghiệm.
Thử nghiệm với các chuyển hướng 302 (tạm thời) cho đến khi tất cả hoạt động như dự định để tránh các vấn đề tiềm ẩn trong bộ nhớ đệm.
Bên cạnh: Trong .htaccesstệp gốc của bạn :
# Rewrite any request for a static resource that does not exist (in the root) RewriteCond %{REQUEST_FILENAME} !-f RewriteRule \.(css|js|png|jpg|webp|gif|svg|ttf|woff2)$ quotes%{REQUEST_URI} [L]
Điểm nhỏ, nhưng bạn đã tham khảo woff2ở đây, nhưng wofftrong /quotes/.htaccesstệp của bạn . Tốt nhất, chúng phải giống nhau. Bạn có thể khái quát điều này, như đã đề cập ở trên cho /quotes/.htaccesstệp. Ví dụ:
# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.\w{2,4}$ quotes%{REQUEST_URI} [L]