Làm cách nào để thêm quy tắc viết lại bên ngoài độc lập với máy chủ?


7

Quy tắc viết lại bên ngoài là tuyệt vời. Họ cho phép bạn xác định các bản viết lại không nhất thiết phải thông qua WordPress ' index.php. Điều này có nghĩa là bạn có thể ánh xạ các quy tắc tùy ý sang các tệp tùy ý như:

$wp_rewrite->add_external_rule( '^somethingrandom/?$', 'wp-content/wp-uploads/hiddendirectory/somefile.php' );

Sau đó, mọi yêu cầu thực sựhttp://site.url/somethingrandom/ sẽ được cung cấp một tệp PHP tĩnh từ một thư mục khác. Điều này thật tuyệt vời, và nó cho phép bạn làm tất cả các loại công cụ tiện lợi.

Nhưng nó chỉ hoạt động với Apache.

Các add_external_rule()phương pháp viết quy tắc đã đăng ký của nó ra .htaccess. Vì Nginx không sử dụng .htaccesstệp, nên các quy tắc bên ngoài hoàn toàn bị máy chủ đó bỏ qua. Những gì tôi cần là một cách độc lập với máy chủ để đăng ký các quy tắc như chương trình ở trên. Có ý kiến ​​gì không?


1
Cho phép WordPress ghi vào tập tin cấu hình máy chủ (thậm chí là .htaccess) dường như là một ý tưởng tồi. Vì vậy, tôi không nghĩ add_external_rulelà thực sự có thể dựa vào thứ gì đó, đặc biệt là vì nó phụ thuộc vào máy chủ web. Tôi thậm chí không muốn nghĩ về cách một người sẽ thực hiện add_external_rulecho IIS.
Weston Ruter

Có một phương pháp để xử lý ISS: github.com/WordPress/WordPress/blob/master/wp-includes/
mẹo

Câu trả lời:


5

Điều này cũng giả sử các tệp .htaccess được kích hoạt trong Apache, hầu như luôn có trong lưu trữ chia sẻ, nhưng thường bị vô hiệu hóa trong môi trường doanh nghiệp. Một cách để thực hiện điều này là viết hàm add_external_nginx_rule của riêng bạn để chuyển hướng ra một tệp (thậm chí có thể sử dụng .htaccess, mặc dù điều đó có thể gây nhầm lẫn - đó phải là một tệp ẩn bắt đầu. trong khối máy chủ Nginx của bạn như

include /var/www/html/sitefolder/.htaccess;

Trong chức năng của bạn, bạn sẽ viết ra các chuyển hướng ở định dạng Nginx, gần giống với định dạng Apache trong nhiều trường hợp. Đây có lẽ là một cái gì đó bạn có thể biến thành một plugin thậm chí. Nó không yêu cầu cấu hình đặc biệt trong tệp cấu hình Nginx của bạn, nhưng sử dụng .htaccess trong Apache cũng yêu cầu phải được bật trong tệp cấu hình Apache, do đó bạn có thể cho rằng đó là khái niệm tương tự.

Lưu ý: Tôi chưa thử bất kỳ thứ gì trong số này, nhưng không thấy lý do gì nó không hoạt động. Sẽ đáng để khám phá.

Cập nhật: Đánh dấu là đúng trong các nhận xét - điều này sẽ không hoạt động vì Nginx chỉ đọc các tệp cấu hình khi khởi động hoặc tải lại ban đầu, vì vậy bạn cần khởi động lại Nginx với bất kỳ thay đổi nào, khiến giải pháp này gặp vấn đề từ quan điểm bảo mật.


Điều này không chắc là đúng vì nginx chỉ đọc các quy tắc trên startuo hoặc nếu được hướng dẫn rõ ràng để làm như vậy, việc thay đổi tệp là không đủ nhưng bạn cũng cần ban hành lệnh "tải lại" máy chủ web một cái gì đó cần phải root sự cho phép mà chính máy chủ web nên thiếu.
Đánh dấu Kaplun
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.