Apache не может обнаружить и переписать URL-адреса в нижний регистр - PullRequest
0 голосов
/ 29 ноября 2018

Чего я пытаюсь достичь?

Я хочу преобразовать все URL-адреса, которые находятся в каталоге / migrate (и его подкаталогах)) в нижний регистр.

Что я сделал?

Я перенес свой веб-сайт из DNN в Wordpress.Поэтому в моих сообщениях есть URL-адреса, которые ссылаются на изображения с сочетанием заглавных и строчных букв.

Все мои каталоги и файлы на диске в папке / migrate (и подпапках) строчные..

При просмотре статьи, если ссылка на изображение имеет заглавный символ, я получаю ожидаемое значение 404.

Например:

https://xxx.domain.net/wp-content/migrate/ABC/image.jpg

https://xxx.domain.net/wp-content/migrate/Xyz/image.jpg

https://xxx.domain.net/wp-content/migrate/abc/Image.jpg

https://xxx.domain.net/wp-content/migrate/ABC/Xyz/image.jpg

Так что после прочтения различных статей в Интернете и здесь я попробовал несколько вещей:

1) Включил mod_speling и добавил это в apache2.conf

LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so
<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>

Это не сработало, продолжал получать 404.

2) Устал использовать Rewritemap в моем/etc/sites-enabled/mysite.conf файл.

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} /migrate [A-Z]
RewriteRule  ^(.*)$ /${lc:$1} [R=301,L]

Однако это переписало бы все URL-адреса в нижний регистр и сломало некоторые плагины и редакторы Wordpress, поскольку файлы на диске имели заглавные буквы.

My.Файл htaccess в корневом каталоге Wordpress выглядит следующим образом:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

#BEGIN Wordpress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

1 Ответ

0 голосов
/ 03 декабря 2018

После долгих часов пробных попыток и чтения журналов, я решил это!

В основном мне нужно было игнорировать все остальные каталоги Wordpress от перезаписи.

RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteCond %{REQUEST_URI} !^/wp-content/uploads/
RewriteCond %{REQUEST_URI} !^/wp-content/themes/
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/
RewriteCond %{REQUEST_URI} !^/wp-includes/
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule ^/?(.*)$ /${lc:$1} [R=301,L]
...