Điểm:2

dấu hai chấm đã sử dụng cho url htaccess http://localhost/1:1

lá cờ cn

Tôi gặp sự cố với dấu hai chấm được sử dụng trong url

url này của tôi

http://localhost/1:1

đây là htaccess của tôi

Viết LạiEngine Trên
RewriteRule ^/(.*):(.*) index.php/$1:$2

lỗi này hiển thị Bị cấm Bạn không có quyền truy cập /1:1 trên máy chủ này.

# Máy chủ ảo
#
<Máy chủ ảo *:80>
  Tên máy chủ localhost
  ServerAlias ​​localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Thư mục "${INSTALL_DIR}/www/">
    Tùy chọn +Chỉ mục +Bao gồm +FollowSymLinks +MultiViews
        AllowOverride all
        Đặt hàng Cho phép, Từ chối
        cho phép từ tất cả
  </Thư mục>
</Máy chủ ảo>
Michael Hampton avatar
lá cờ cz
Kiểm tra nhật ký lỗi Apache.
Điểm:1
lá cờ kz

Có một vài vấn đề ở đây ...

  1. Trong một thư mục .htaccess bối cảnh, đường dẫn URL phù hợp với viết lại quy tắc mẫu không bao giờ bắt đầu bằng dấu gạch chéo, vì vậy regex ^/(.*):(.*) sẽ không bao giờ khớp và chỉ thị không làm gì cả. Nên viết lại quy tắc mẫu sẽ cần phải được ^(.*):(.*) - không có tiền tố dấu gạch chéo.

    • Tuy nhiên, regex này rất tổng quan và có lẽ là phù hợp nhất quá nhiều. Nếu bạn đang mong đợi một yêu cầu của mẫu /1:1, I E. /<số>:<số> sau đó sử dụng một biểu thức chính quy cụ thể hơn, vd. ^\d+:\d+$
  2. Vì bạn đang nhận được 403 Bị cấm (trái ngược với 404 Không tìm thấy), tôi cho rằng bạn đang sử dụng máy chủ Windows. "Vấn đề" ở đây là : (dấu hai chấm) không phải là ký tự hợp lệ trong tên tệp Windows. Đây là một vấn đề với .htaccess bởi vì yêu cầu được ánh xạ tới hệ thống tập tin trước .htaccess (và mod_rewrite) được xử lý - tại thời điểm đó, lỗi 403 được kích hoạt. Thay vào đó, bạn sẽ cần phải viết lại yêu cầu trong cấu hình máy chủ chính (hoặc bộ chứa VirtualHost) - điều này xảy ra trước yêu cầu được ánh xạ tới hệ thống tập tin.

Vì vậy, những gì bạn đang cố gắng thực hiện... viết lại yêu cầu có chứa dấu hai chấm, sử dụng .htaccess trên máy chủ Windows là không thể. Bạn có thể làm điều này trên Linux (cho phép có dấu hai chấm trong tên tệp) HOẶC trong cấu hình máy chủ chính (người phục vụ hoặc Máy chủ ảo ngữ cảnh) trên Windows, nhưng không ở .htaccess.

Khi sử dụng mod_rewrite trong một người phục vụ (hoặc Máy chủ ảo) bối cảnh (trái ngược với .htaccess) bạn làm cần tiền tố dấu gạch chéo (trên cả hai mẫuthay thế dây). Ví dụ:

# Trong bối cảnh "máy chủ" (hoặc "máy chủ ảo"),
# không phải ".htaccess" (hoặc phần "<Directory>" trong cấu hình máy chủ)

Viết LạiEngine Trên

# Viết lại nội bộ "/1:1" thành thông tin đường dẫn trên "index.php"
RewriteRule ^/\d+:\d+$ /index.php$0 [L]

Các $0 phản hồi chứa toàn bộ đường dẫn URL được ghi lại bởi viết lại quy tắc mẫu. Điều này bao gồm tiền tố dấu gạch chéo (khi được sử dụng trong người phục vụ ngữ cảnh), đó là lý do tại sao dấu gạch chéo bị bỏ qua trong thay thế chuỗi.


CẬP NHẬT:

Tôi đã thực hiện các thay đổi, vui lòng xem lại câu hỏi của tôi và xem, tôi đã nhập chính xác

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride all
        Order Allow,Deny
        Allow from all
  </Directory>
</VirtualHost>

Bạn dường như không thực hiện bất kỳ thay đổi nào; ít nhất là không ở đúng phần? Như đã đề cập ở trên, các chỉ thị này cần được thêm trực tiếp vào <VirtualHost> vùng chứa (mà bạn đã đăng). Chúng không thể được thêm vào .htaccess trên HĐH Windows - đơn giản là chúng sẽ không làm gì cả và bạn sẽ nhận được phản hồi 403 Forbidden như đã nêu.

Ở trên nên được viết như thế này:

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"

  # Enable the rewrite engine in a virtualhost context
  RewriteEngine On

  # Internally rewrite "/1:1" to path-info on "index.php"
  RewriteRule ^/\d+:\d+$ /index.php$0 [L]

  <Directory "${INSTALL_DIR}/www/">
    Options -Indexes -Includes +FollowSymLinks -MultiViews
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

Bạn sẽ cần khởi động lại Apache để những thay đổi này có hiệu lực. (Không giống .htaccess các tệp được giải thích trong thời gian chạy.)

Tuy nhiên, bạn có những chỉ thị nào khác trong .htaccess và các URL khác của bạn được định tuyến như thế nào? Bạn đã đăng chỉ thị sau trong phần bình luận:

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Điều này định tuyến URL hoàn toàn khác với những gì bạn đang yêu cầu trong câu hỏi của mình. Trong câu hỏi của bạn, bạn đang chuyển đường dẫn URL dưới dạng thông tin đường dẫn bổ sung tới index.php. Tuy nhiên, trong lệnh này, bạn đang chuyển URL như một phần của chuỗi truy vấn? Làm thế nào để những liên quan? Tại sao chúng khác nhau? Rõ ràng là bạn cần chuyển URL theo cách mà "ứng dụng MVC" của bạn đang mong đợi.

amir shariflou avatar
lá cờ cn
Cảm ơn bạn rất nhiều vì đã đăng và nhận xét về hướng dẫn này cho tôi, nhưng giải pháp này cũng không hoạt động. Có, tôi muốn sử dụng hướng dẫn này trong Máy chủ Vamp.Trên máy chủ ảo Linux, nếu có thể, tôi sẽ thử một lần. Cố gắng
amir shariflou avatar
lá cờ cn
Hay đúng hơn, tôi có thể nhận được hướng dẫn nào từ dấu hai chấm trong tham số? Bạn đã có một giải pháp? đây là lỗi của tôi (Apache/2.4.37 (Win64) PHP/7.0.33 Server at localhost Port 80)
lá cờ kz
Giải pháp (cách giải quyết) tôi đã đăng ở trên sẽ hoạt động như đã viết. Tôi đã thử nghiệm điều này trên máy chủ Apache/Windows bằng cách sử dụng `` vùng chứa trong cấu hình máy chủ và nó đang hoạt động như dự định... để chuyển đường dẫn URL (`/1:1`) dưới dạng PATH_INFO tới tập lệnh `/index.php` (có vẻ như đây là thứ bạn đang cố gắng làm trong câu hỏi của bạn). (Đây không phải là cách duy nhất để chuyển đường dẫn URL. Bạn có thể chuyển nó dưới dạng một chuỗi truy vấn hoặc không chuyển bất kỳ thứ gì và thay vào đó kiểm tra `REQUEST_URI` - nhưng điều này phụ thuộc vào những gì tập lệnh của bạn đang mong đợi.)
lá cờ kz
@amirshariflou Chính xác thì bạn đang sử dụng các chỉ thị này ở đâu? Vui lòng thêm các chỉ thị máy chủ có liên quan vào câu hỏi của bạn. Bạn đã khởi động lại Apache sau khi thay đổi cấu hình máy chủ chưa? "Tôi có thể nhận được hướng dẫn nào từ dấu hai chấm trong tham số?" - Xin lỗi, tôi không rõ ý của bạn là gì? Bạn vẫn nhận được 403 Forbidden? Tập lệnh của bạn (`index.php`) muốn đọc đường dẫn URL như thế nào? "đây là lỗi của tôi" - Tôi không thấy lỗi?
lá cờ kz
@amirshariflou Tôi đã cập nhật câu trả lời của mình để xóa dấu gạch chéo bổ sung/không cần thiết trong chuỗi _substitution_. Mặc dù đây thực sự chỉ là một "dọn dẹp", nhưng nó thực sự không tạo ra bất kỳ sự khác biệt nào đối với việc nó có "hoạt động" hay không.
amir shariflou avatar
lá cờ cn
Cảm ơn bạn rất nhiều vì thời gian của bạn, nhưng vấn đề của tôi đã không được giải quyết. Vui lòng viết mã chính xác cho tôi để tìm ra nó là gì. Mình đã thử nhiều cách nhưng không được, còn cái bẫy chuyển qua host Linux chạy ở đó không cần code. Tôi không biết tại sao nó lại gây khó chịu trong wamperver - tôi thậm chí đã quyết định sử dụng một xampp khác. Nhưng tôi biết nó phải được sửa bằng mã trong tệp htaccess
amir shariflou avatar
lá cờ cn
Xem địa chỉ này tôi muốn làm chính xác điều đó - http://www.recitequran.com/1:1
lá cờ kz
@amirshariflou "Vui lòng viết mã chính xác cho tôi" - mã trong câu trả lời của tôi _is_ mã chính xác. Tuy nhiên, bạn cần đặt nó vào đúng vị trí trong cấu hình máy chủ của mình (không phải `.htaccess`) và khởi động lại máy chủ của bạn. Điều này phụ thuộc vào cách bạn đã định cấu hình máy chủ của mình. Vui lòng thêm các phần có liên quan trong cấu hình máy chủ của bạn vào câu hỏi của bạn, với các chỉ thị này tại chỗ - sau đó tôi có thể xem và kiểm tra. "Tôi không biết tại sao nó lại gây phiền nhiễu trong wamperver" - như đã nêu trong câu trả lời của tôi, đây là một hạn chế của HĐH Windows, không phải Apache.
lá cờ kz
@amirshariflou " Tôi biết nó phải được sửa bằng mã trong tệp htaccess" - Không. Như tôi đã nêu trong câu trả lời của mình, bạn không thể sử dụng `.htaccess` cho việc này (trên Windows). Bạn cần đặt các lệnh này trong cấu hình máy chủ chính (hoặc `` vùng chứa).
lá cờ kz
@amirshariflou Bạn có lệnh nào khác trong tệp `.htaccess` của mình? Các URL khác được định tuyến như thế nào?
amir shariflou avatar
lá cờ cn
Định tuyến của tôi là do tôi làm việc với mvc php và tôi làm việc theo tiêu chuẩn, nhưng vấn đề ở đây là điều gì sẽ xảy ra trong tệp htaccess khi bạn nhập địa chỉ, máy chủ wamp không báo lỗi và trả về các giá trị 1 : 1 như một tham số Hãy thử nó trên hệ thống của bạn một lần, nó rất quan trọng
amir shariflou avatar
lá cờ cn
Lỗi Cấm Bạn không có quyền truy cập /1:1 trên máy chủ này. Máy chủ Apache/2.4.37 (Win64) PHP/7.0.33 tại localhost Cổng 80
amir shariflou avatar
lá cờ cn
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
lá cờ kz
Bạn có quyền truy cập vào cấu hình máy chủ Apache không? `` vùng chứa _defines_ trang web của bạn? Vui lòng chỉnh sửa câu hỏi của bạn để bao gồm thông tin này. "máy chủ wamp **không** mắc lỗi" / "Lỗi bị cấm Bạn không có quyền truy cập"?! Bạn đang nhận được phản hồi "Bị cấm" trên máy chủ nào?
amir shariflou avatar
lá cờ cn
Tôi đã thực hiện các thay đổi, vui lòng xem lại câu hỏi của tôi và xem, tôi đã nhập chính xác
lá cờ kz
@amirshariflou Tôi đã cập nhật câu trả lời của mình. Tuy nhiên, chúng tôi cũng cần xem nội dung của tệp `.htaccess` của bạn vì điều này có thể xung đột và gây ra các sự cố khác.

Đă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.