mod_speling URL-адреса без учета регистра не работают
У меня есть сервер ServerPilot, работающий на Ubuntu 16.04.3
Это приложение, которое представляет собой веб-сайт Wordpress, но имеет другие каталоги, не относящиеся к Wordpress. В этих каталогах есть то, что меня беспокоит.
Я проверил, что mod_speling действительно включен на сервере... однако, когда я помещаю в
CheckCaseOnly on
CheckSpelling on
к моему файлу приложений.htaccess, нечувствительный к регистру URL все еще разрешается как Wordpress 404 вместо фактического разрешения.
К сожалению, сайт находится в фазе тестирования / контроля качества, поэтому я не могу привести фактический URL, однако, в качестве примера:
https://www.example.com/university/Smartapp/External/index.html разрешается должным образом, поскольку в приложении этот путь является именно таким, с прописной буквой S и заглавной буквой E... однако... URL-адрес https://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
И конфигурация nginx по умолчанию для ServerPilot для приложения:
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 для приложения