Lỗi 404 mỗi khi lưu hoặc chỉnh sửa bài viết

Chủ đề trong danh mục 'Web' được đăng bởi TechSHARE Admin, 20/11/16.

Lỗi 404 mỗi khi lưu hoặc chỉnh sửa bài viết 5 5 1votes
5/5, 1 vote

Chia sẻ trang này

  1. Chủ đề
  2. Reviews (1)
Thêm chủ đề của TechSHARE Admin
  1. admin

    admin Quản trị viên

    Ngày tham gia:
    31/5/16
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Nghề nghiệp:
    iServices for Business
    Nơi ở:
    Ha Noi
    Trang chủ:
    Lỗi này thường xuyên xảy ra khi bạn đăng nội dung tiếng anh. Sau khi bạn lưu nội dung post mới hoặc cập nhật post cũ thỉnh thoảng bạn bị nhảy đến trang 404 và hiện tượng này xẩy ra ngẫu nhiên không có căn cứ nào để nhận dạng khi nào thì lỗi đó bị lặp lại.

    Media này không hiển thị với bạn. Vui lòng Đăng ký hoặc Đăng nhập.

    Thường thì guyên nhân do ‘mod_security’ được cài đặt trên apache. Nếu trong nội dung post có chứa một số từ mà extension mod_security không cho phép, ví dụ như lệnh SQL “insert” thì sau khi nhấn nút Publish/update wordpress sẽ trả về trang 404 not found.

    Giải pháp.

    Tắt mod_security

    Có nhiều gợi để tắt mod_security module bằng cách chèn rules vào file .htaccess
    PHP:
    #...
    <IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterPost Off
    </IfModule>
    <
    IfModule mod_env.c>
    SetEnv MODSEC_ENABLE Off
    PassEnv MODSEC_ENABLE
    </IfModule>
    #...
    Tuy nhiên, giải pháp trên không làm việc với một số hosting. Lúc này bạn có thể can thiệp sâu vào apache, hãy mở file httpd.conf và tìm module mod_security2. Bạn tắt module này trong htaccess như sau:
    PHP:
    #...
    <IfModule mod_sec2.c>
    SecFilterEngine Off
    SecFilterPost Off
    </IfModule>
    #...
    Nếu cách này cũng không hoạt động, bạn thực hiện tiếp giải pháp dưới đây.

    Sửa mod_security Rules

    Tìm file /usr/local/apache/conf/modsec2/exclude.conf và thêm đoạn dưới đây vào trên cùng.
    PHP:
    <locationmatch "/wp-admin/post.php">
    SecRuleRemoveById 300013
    SecRuleRemoveById 300015
    SecRuleRemoveById 300016
    SecRuleRemoveById 300017
    </locationmatch>
    Tìm rule ID

    Làm sao chúng ta biết rule nào để loại bỏ? Bạn có thể tìm thông tin này trong file logmodsec_audit.log, mọi filter bị chặn sẽ được ghi lại trong file này.
    PHP:
    # your problem-post URL here...
    --2950df1e-H--
    MessageAccess denied with code 500 (phase 2). Pattern match "((select|grant|delete|insert|drop|alter|replace|truncate|update|create|rename|describe)[[:space:]]+[A-Z|a-z|0-9|\
    \*| |\\,]+[[:space:]]+(from|into|table|database|index|view)[[:space:]]+
    [A-Z|a-z|0-9|\\*| |\\,]|UNION SELECT.*\\'.*\\'.*,[0-9].*INTO.*FROM)" 
    at REQUEST_BODY.
    [
    file "/usr/local/apache/conf/modsec2.user.conf"] [line "345"] [id "300013"] [rev "1"]
    [
    msg "Generic SQL injection protection"] [severity "CRITICAL"]
    ActionIntercepted (phase 2)
    #...
    Lọc bởi URL hoặc IP sẽ phát hiện ra rules nào bị kích hoạt khi bạn cập nhật post. Ở trường hợp trên URL của post trên bị chặn bởi rule “300013“.

    Lưu ý: kiểm tra log của http.conf, mod_security có thể phát hiện thêm những lỗi khác từ đó cấu hình hosting của bạn cho phù hợp nhu cầu sử dụng.

    Đọc bài viết gốc
     
    Lần sửa cuối bởi một Moderator: 22/11/16

Chia sẻ trang này