2012-11-30 35 views
26

Có thể thực hiện các quy tắc từ một tệp htaccess khác trong .htaccess không?Bao gồm một tệp htaccess khác từ .htaccess

.htaccess 

RewriteEngine On 
RewriteCond ... 
RewriteRule ... 

Include .htaccess1 
. 
. 
Include .htaccess2 

Thực hiện điều này cho phép 500. Không được phép ở đây Có cách nào để thực hiện việc này không? Bởi vì tôi cần điều này khá tệ.

+0

Sẽ chỉ có 1 '.htacess' cho một vị trí thư mục – diEcho

+1

Vâng, tôi hiểu điều đó. Nhưng chúng ta có thể bao gồm bên ngoài như cách thực hiện của nó trong apache2.conf? .htaccess nói Bao gồm htaccessfiles/ – EPQRS

Trả lời

42

Bạn không thể bao gồm các quy tắc, câu lệnh, định nghĩa hoặc chỉ thị từ các tệp khác từ tệp htaccess. Không thể sử dụng chỉ thị Include bên trong tệp htaccess. Một phần của điểm của tệp htaccess là hoạt động tương tự như khối <Directory> nhưng tự chứa và không thể truy cập những thứ bên ngoài thư mục (thư mục con là ok) nhưng cụ thể hơn không có gì bên ngoài gốc tài liệu. Bằng cách này, ai đó đang làm những việc độc hại sẽ không thể chỉ ra các yêu cầu hoặc bao gồm các tệp/nội dung từ các thư mục khác bằng cách hack tập tin htaccess.

Trong phạm vi mod_rewrite cụ thể, có các tùy chọn cho số RewriteOptions cho phép inheriting rewrite rules from the htaccess file from a parent directory, nhưng không có gì để tự ý bao gồm các quy tắc từ bất kỳ đâu.

3

Tôi biết điều này có thể hơi muộn, nhưng thay vào đó nếu bạn đang cố gắng triển khai lệnh cấm IP hoặc loại nội dung quy tắc động tương tự, hãy sử dụng quy tắc cuối cùng trong tệp .htaccess của bạn để trỏ yêu cầu tại một .php hoặc kịch bản tương tự không hoạt động thực hiện chức năng này (kịch bản đơn của bạn có thể tải các quy tắc động theo định dạng của riêng bạn và đưa ra quyết định tương tự như Apache sẽ tùy thuộc vào những gì bạn thực sự cố gắng thực hiện) sau đó chuyển yêu cầu đến trang thực đang được yêu cầu. Nó thêm một lớp cho toàn bộ yêu cầu xử lý, nhưng cung cấp cho cùng một chức năng động cho tất cả các trang mà không cần phải tạo ra các quy tắc trực tiếp cho máy chủ và cố gắng để Apache đưa ra quyết định cho bạn.

Chỉ cần nghĩ rằng tôi sẽ thêm suy nghĩ này cho bất cứ ai khác có thể vấp ngã trên bài đăng này tìm kiếm một cái gì đó tương tự.

+0

Tôi muốn xem ví dụ về cách thực hiện việc này, nếu có ai có thể cung cấp. – authentictech

+1

một bộ định tuyến đơn giản? https://github.com/moagrius/RegexRouter – Jonathan

+0

@ Jonathan Tôi cảm thấy như bạn đã đưa tôi đến gần với giải pháp mà tôi tìm kiếm nhưng tôi vẫn còn trong bóng tối. Mục tiêu của tôi là nhập danh sách các IP bị cấm và sau đó tải chỉ mục Wordpress 'index.php – Jay

-1

Bạn có thể tạo tập lệnh phía máy chủ như PHP ".htaccess.php" và bên trong đặt bao gồm của bạn. Tất nhiên, bạn phải cấu hình apache: AccessFileName.htaccess .htaccess.php

1

Có thể - trong 2-3 bước ...

  1. Tạo tập tin của bạn trong các khu công nghiệp để Deny. Nó có thể là tệp .php, tệp .txt, thậm chí tệp .csv.

  2. Tạo tập lệnh .php (hoặc ngôn ngữ bạn chọn), mục đích là xuất tệp có tên ".htaccess".

  3. Mỗi lần bạn cập nhật tệp IP của bạn thành Từ chối, chạy tập lệnh .php 2) và xuất một tệp .htaccess mới, cho từng Miền của bạn.

Nếu bạn có câu lệnh ngoài IP bị từ chối, hãy mã hóa chúng trong tập lệnh .php để xuất trước. Xem https://www.askapache.com/htaccess/

.php script quát có thể trông giống như:

$output = "statement1".PHP_EOL; 
$output .= "statement2".PHP_EOL; 
$output .= "statement3".PHP_EOL; 
... 

Sau đó, khi bạn đã sẵn sàng cho phần DENY:

$denyList = file_get_contents("the/list/of/IPs.txt"); // or .php etc. 
$ArrayDenyList = explode(PHP_EOL,$denyList); // or your line ending character, if necessary 
foreach($ArrayDenyList as $key =>$value) { 
$output .= 'Deny from '.$value.PHP_EOL; 
    } 

Sau đó ghi tệp: (bạn có thể có một cách tiêu chuẩn):

$handle = fopen(.htaccess,"w"); //complete path if in another domain 
fwrite($handle,$output); 
fclose($handle); 
echo "Success - <p>"; 

Nếu bạn có nhiều hơn một tên miền, sau đó có một mảng của đường dẫn tên miền đó, và foreach rằng Array, và fwrite cho mỗi đường dẫn.

Nếu một số miền đã có yêu cầu .htaccess, hãy đặt nó vào tệp .txt có thể đọc được ... thực hiện một tệp_get_contents (trên đó), "output =", thêm đầu vào "Deny, then". = .. ." mỗi trong một 'foreach()' loop.

Dù sao ... bạn đã làm tất cả những điều này trước khi ... chỉ cần áp dụng từng kỹ thuật để kịch bản này.

một file .htaccess không thể "include()" các tệp khác, nhưng tập lệnh .php có thể và các tập lệnh .php có thể xuất các tệp có tên ".htaccess", có thể được tạo bằng tập lệnh.

Phương thức trên hoạt động và tôi bắt đầu thực hiện khi tôi cần để tạo các hàng của "RewriteRule" cho mỗi danh mục sản phẩm của tôi! Mỗi lần tôi thêm một sản phẩm mới, tôi chạy tập lệnh của mình để xuất ra một tệp .htaccess mới ... được xây dựng từ bảng các sản phẩm SQL của tôi. Tương tự như tập lệnh .php của tôi là "fwrite" của sitemap.xml của tôi.

(Tôi hy vọng không có dấu chấm câu .php hoặc "$" s bị lạc trong đánh máy này).

Các vấn đề liên quan