Điểm:0

Apache2 mod_rewrite dường như không làm gì cả

lá cờ lk

Tôi gặp khó khăn để mod_rewrite hoạt động trong Apache2 trên Debian 10. Tôi đã bật tiện ích mở rộng bằng

viết lại a2enmod
systemctl khởi động lại apache2

Và không có lỗi và có thể thấy mô-đun trong

apachectl -M
...
viết lại_module (đã chia sẻ)
...

Mặc dù khi tôi thêm nó vào vhost của mình trong các trang có sẵn

<VirtualHost *:80>
   ServerName default.nothing
   ServerAlias www.default.nothing
   DocumentRoot /var/www/html/public_html/00-default
   <Directory "/volume/dev/html/public_html/00-default">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
      RewriteEngine on
      RewriteRule ^192.168.20.87$ nothing
   </Directory>
   <IfModule mpm_user_module>
      ServerEnvironment apache apache
   </IfModule>
</VirtualHost>

Hy vọng rằng nó sẽ viết lại url http://192.168.20.87/page.php dưới dạng http://nothing/page.php trong tab trình duyệt. Không có vấn đề gì tôi đưa vào RewriteRule dường như không có gì xảy ra. tôi chắc chắn tôi đang làm gì đó

TheLovelySausage avatar
lá cờ lk
Vì một số lý do nếu tôi làm điều đó với .htaccess thì nó hoạt động
Gerrit avatar
lá cờ cn
Trong cấu hình vhost, bạn phải sử dụng `/` làm ký tự đầu tiên của biểu thức chính quy. Đôi khi bạn thấy các biểu thức chính `/?url` hoạt động trong cả vhost hoặc .htaccess.
lá cờ kz
@Gerrit Không phải khi được sử dụng bên trong `` vùng chứa (tức là ngữ cảnh _directory_), như được hiển thị trong câu hỏi.
Điểm:1
lá cờ kz
RewriteEngine bật
RewriteRule ^192.168.20.87$ không có gì

Vì một số lý do nếu tôi làm điều đó với .htaccess thì nó hoạt động

Mặc dù điều này sẽ không khớp với URL http://192.168.20.87/page.php ngay cả khi bạn "làm điều đó với .htaccess", vì vậy bạn phải là làm việc khác?

Quy tắc trên (khi được sử dụng trong một <Directory> container) khớp với một URL có dạng http://192.168.20.87/192.168.20.87 (hoặc http://default.nothing/192.168.20.87 - nếu tên máy chủ của bạn giải quyết được).

Các viết lại quy tắc mẫu chỉ khớp với đường dẫn URL, không phải tên máy chủ (tức là. 192.168.20.87). Vì vậy, điều này phù hợp với /trang.php, (hoặc trang.php - đường dẫn tương đối/không có tiền tố dấu gạch chéo - khi được sử dụng trong một danh mục bối cảnh như <Directory> hoặc .htaccess.)

Vì vậy, điều này sẽ cần phải giống như sau:

RewriteRule ^page\.php$ không có gì

(Mặc dù không rõ bạn đang cố gắng làm gì ở đây, nhưng "không có gì" là gì? Nếu bạn đang cố kích hoạt 404 thì đây thực sự không phải là cách để thực hiện.)

Như @Gerrit đã đề cập một cách lỏng lẻo trong các nhận xét, khi viết lại quy tắc chỉ thị được sử dụng trong một người phục vụ hoặc Máy chủ ảo ngữ cảnh (nghĩa là không có trong <Directory> hoặc .htaccess thùng chứa - một danh mục ngữ cảnh) thì đường dẫn URL khớp với viết lại quy tắc chỉ thị có liên quan đến gốc, bắt đầu bằng dấu gạch chéo, bởi vì chỉ thị được xử lý sớm hơn nhiều, trước khi nó được ánh xạ tới hệ thống tệp. ví dụ. ^/trang\.php$.


CẬP NHẬT:

DocumentRoot /var/www/html/public_html/00-default
<Thư mục "/volume/dev/html/public_html/00-default">

Tôi vừa nhận thấy rằng bạn Tài liệuRoot<Directory> chỉ thị đang tham chiếu hai vị trí hệ thống tập tin khác nhau?! Với thông tin hạn chế trong câu hỏi, điều này <Directory> container sẽ không bao giờ được xử lý.

Nhưng trừ khi bạn có các chỉ thị bổ sung ở nơi khác (mà tôi cho rằng bạn phải có) thì bất kỳ .htaccess tệp được đặt trong thư mục gốc của tài liệu (là nơi mà tôi cho rằng bạn đang đặt nó) cũng sẽ không bao giờ được xử lý.

TheLovelySausage avatar
lá cờ lk
Tôi chỉ cố gắng vô nghĩa để làm cho nó thất bại, câu hỏi đặt ra là cố gắng để mod_rewrite làm bất cứ điều gì nhưng tôi chỉ có thể khiến nó làm mọi việc với htaccess
lá cờ kz
@TheLovelySausage Chà, lệnh bạn đã đăng ban đầu sẽ không thành công - đơn giản là nó sẽ không làm bất cứ điều gì vì nó sẽ không khớp với yêu cầu. Nếu bạn có tệp `.htaccess` với bất kỳ lệnh mod_rewrite nào thì tệp này sẽ ghi đè hoàn toàn tệp `` vùng chứa trong cấu hình máy chủ (nó sẽ không làm gì cả). Để làm rõ, bạn đang khởi động lại Apache mỗi khi thay đổi cấu hình máy chủ?
lá cờ kz
@TheLovelySausage Tôi vừa nhận thấy rằng `DcoumentRoot` và ` của bạn` chỉ thị đang tham chiếu đến hai vị trí hệ thống tập tin khác nhau?! Trong cấu hình bạn đã đăng, điều này có nghĩa là `` vùng chứa không bao giờ được xử lý. Tôi đã cập nhật câu trả lời của mình. (Bạn đang đặt tệp `.htaccess` ở đâu?)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.