![mod_speling 不区分大小写的 URL 不起作用](https://linux22.com/image/734065/mod_speling%20%E4%B8%8D%E5%8C%BA%E5%88%86%E5%A4%A7%E5%B0%8F%E5%86%99%E7%9A%84%20URL%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我有一个 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...但是... URLhttps://www.example.com/university/smartapp/external/index.html抛出 Wordpress 404 页面未找到
我该怎么做才能让它正常工作?
编辑如此接近...我认为正在发生的事情是 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.
答案1
最终不得不放弃 .htaccess 才能实现这一点
诀窍在于添加:
<DirectoryMatch "(^|/)university($|/)">
CheckCaseOnly On
CheckSpelling On
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/university/(.*)$ [OR]
RewriteRule ^.*$ - [L]
</DirectoryMatch>
到应用程序的 vhost 配置