Cấu hình URL Rewrite cho website trên IIS server để loại bỏ file index.php và đường dẫn ảo do cơ chế router của các PHP Framework như Laravel, CodeIgniter,…

URL REWRITE đã được cài trên IIS

Để cài IIS hiểu các quy tắc cấu hình rewrite url từ các router ảo do cơ chế các framework php (Laravel, CodeIgniter,…) tạo ra cần đảm bảo các điều sau:

1. Đảm bảo URL REWRITE đã cài trên IIS

Hình 1. Kiểm tra xem URL Rewrite đã được cài trên IIS hay chưa?

Nếu chưa cài URL Rewrite thì bạn hãy tải bản cài đặt từ link sau: https://www.iis.net/downloads/microsoft/url-rewrite. Rồi bấm vào file cài đặt vừa tải về để cài đặt.

Sau khi cài xong, hãy mở lại IIS và kiểm tra xem URL Rewrite xuất hiện như trong hình 1 là được.

2. Cài đặt IIS tổng cho phép override với cấu hình thấp hơn (Ứng dụng của bạn)

Để thực hiện cho phép này, cần thực hiện như sau:

  • Mở file ApplicationHost.config (File cấu hình tổng của IIS) ở đường dẫn sau:
C:\Windows\System32\inetsrv\config\applicationHost.config

* Lưu ý: Mở bằng notepad hoặc notepad++ hoặc trình editor nào thì cũng cần mở bằng quyền Administrator.

  • Sau đó tìm tất cả các session sau rồi sửa từ Deny thành Allow như bên dưới:
<section name="rewrite" overrideModeDefault="Allow" />
<section name="handlers" overrideModeDefault="Allow" />
<section name="modules" overrideModeDefault="Allow" />
  • Cuối cùng khởi động lại dịch vụ IIS bằng lệnh:
iisreset

3. Cấu hình các quy tắc rewrite bằng file web.config

Tạo file web.config với nội dung như sau để IIS hiểu đường dẫn ảo trên URL không phải là đường dẫn vật lý và chuyển về index.php của các framework xử lý với router của riêng nó.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite to index.php" stopProcessing="true">
          <match url="^(.*)$" />
          <conditions logicalGrouping="MatchAll">
            <!-- Nếu không phải file thật -->
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <!-- Nếu không phải thư mục thật -->
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <!-- Gửi mọi request về index.php -->
          <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>

    <!-- Loại bỏ WebDAV để không chặn verb -->
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV"/>
    </handlers>
  </system.webServer>
</configuration>

Lưu ý: Đặt file web.config này nằm ở thư mục góc của ứng dụng web.

4. Cấu hình để host (site) web của bạn hiểu index.php là file mặc định chạy đầu tiên

Để cấu hình này, chúng ta vào Default Document của site như hình 2.

Hình 2. Vào Default Document của site

Đảm bảo index.php được ưu tiên số 1 trong các định dạng, bạn kiểm tra nếu đã có thì đẩy nó lên vị trí số 1, nếu chưa có thì thêm (Xem hình 3)

Hình 3. Đảm bảo định dạng index.php được ưu tiên là mặc định

Cuối cùng khởi động lại dịch vụ IIS và kiểm tra ứng dụng của bạn.

iisreset

Hy vọng hữu ích với bạn!

Nosomovo

 

Chia sẻ lên