Nginx

mod_speling 不區分大小寫的 URL 不起作用

  • August 24, 2021

我有一個 ServerPilot 伺服器,在 Ubuntu 16.04.3 上執行

它上面是一個應用程序,它是一個 Wordpress 網站,但有其他非 wordpress 目錄。在這些目錄中是我所關心的。

我已經驗證了 mod_speling 確實在伺服器上啟用了……但是,當我輸入

CheckCaseOnly on
CheckSpelling on

對於我的應用程序 .htaccess 文件,不區分大小寫的 URL 仍然解析為 Wordpress 404,而不是實際解析。

不幸的是,該站點處於測試/QA 階段,因此我無法給出實際的 URL,但是,例如:

https://www.example.com/university/Smartapp/External/index.html可以正確解析,因為在應用程序中,該路徑正是如此​​,大寫的 S 和大寫的 E ……但是…… URL https ://www.example.com/university/smartapp/external/index.html拋出 Wordpress 404 Page Not Found

我該怎麼做才能讓它工作?

編輯如此接近……我認為正在發生的是Wordpress首先處理。

所以……我實現了以下內容:

CheckCaseOnly On
CheckSpelling On

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_URI} ^/university/(.*)$ [OR]
   RewriteCond %{REQUEST_URI} ^/events/(.*)$ [OR]
   RewriteCond %{REQUEST_URI} ^/Videos/(.*)$ [OR]
   RewriteCond %{REQUEST_URI} ^/2017-holiday-card/(.*)$ [OR]
   RewriteCond %{REQUEST_URI} ^/Holiday-Card/(.*)$ [OR]
   RewriteRule ^.*$ - [L]
</IfModule>


# BEGIN WordPress
RewriteEngine On

RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress

ServerPilot 應用程序的預設 nginx 配置是:

location / {
   proxy_pass      $backend_protocol://$backend_host:$backend_port;
}

我想做類似的事情:

location ~* ^/university/ {
   proxy_pass      $backend_protocol://$backend_host:$backend_port;
}

但它似乎也沒有做任何事情……

其中,確實允許不區分大小寫的 URL 工作……但是,它確實破壞了 Wordpress 的永久連結,因為 wordpress 側的所有內頁現在都是 404

ServerPilot processes requests as such: Web Browser -> Nginx -> Apache -> PHP-FPM, please leave the nginx tag on the question since it is relative to it.

最終不得不放棄 .htaccess 才能正常工作

訣竅是添加什麼:

<DirectoryMatch "(^|/)university($|/)">
   CheckCaseOnly On
   CheckSpelling On
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_URI} ^/university/(.*)$ [OR]
   RewriteRule ^.*$ - [L]
</DirectoryMatch>

到應用程序的虛擬主機配置

引用自:https://serverfault.com/questions/955100