У меня есть файл page1.php, расположенный внутри
/public_html/mypages/page1.php
если пользователь запрашивает www.myurl.com/Mypages/Page1.php
, возвращаемый file not found
как я могу обеспечить, чтобы каждый запрос обрабатывался независимо от случая
Я использую сервер godaddy linux
со страницы поддержки
https://support.godaddy.com/help/article/899/how-do-i-use-mod_rewrite
Я узнал, что это можно сделать из .htaccess
поэтому я добавил .htaccess
в /public_html/mypages/
http://www.chrisabernethy.com/force-lower-case-urls-with-mod_rewrite/
вот содержание моего.htaccess файла
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
после этого, когда я пытаюсь получить доступ к любому файлу www.myurl.com/Mypages/Page1.php
он дает внутреннюю ошибку сервера. Пожалуйста, помогите мне решить эту проблему.
Я также попытался добавить
<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>
и теперь я не получаю ошибку внутреннего сервера, но я получаю
"file not found error"
www.myurl.com/mypages/page1.php → отлично работает. но www.myurl.com/mypages/Page1.php → "file not found error"
Чтобы решить эту проблему, я изменил все свои имена файлов на нижний регистр и добавил следующее в.htaccess. (как предлагается здесь)
RewriteCond %{REQUEST_URI} !([A-Z]+)
RewriteRule .* - [S=27]
RewriteRule ^(.*)A(.*)$ http://%{HTTP_HOST}/$1a$2 [R=301,L]
RewriteRule ^(.*)B(.*)$ http://%{HTTP_HOST}/$1b$2 [R=301,L]
RewriteRule ^(.*)C(.*)$ http://%{HTTP_HOST}/$1c$2 [R=301,L]
RewriteRule ^(.*)D(.*)$ http://%{HTTP_HOST}/$1d$2 [R=301,L]
RewriteRule ^(.*)E(.*)$ http://%{HTTP_HOST}/$1e$2 [R=301,L]
RewriteRule ^(.*)F(.*)$ http://%{HTTP_HOST}/$1f$2 [R=301,L]
RewriteRule ^(.*)G(.*)$ http://%{HTTP_HOST}/$1g$2 [R=301,L]
RewriteRule ^(.*)H(.*)$ http://%{HTTP_HOST}/$1h$2 [R=301,L]
RewriteRule ^(.*)I(.*)$ http://%{HTTP_HOST}/$1i$2 [R=301,L]
RewriteRule ^(.*)J(.*)$ http://%{HTTP_HOST}/$1j$2 [R=301,L]
RewriteRule ^(.*)K(.*)$ http://%{HTTP_HOST}/$1k$2 [R=301,L]
RewriteRule ^(.*)L(.*)$ http://%{HTTP_HOST}/$1l$2 [R=301,L]
RewriteRule ^(.*)M(.*)$ http://%{HTTP_HOST}/$1m$2 [R=301,L]
RewriteRule ^(.*)N(.*)$ http://%{HTTP_HOST}/$1n$2 [R=301,L]
RewriteRule ^(.*)O(.*)$ http://%{HTTP_HOST}/$1o$2 [R=301,L]
RewriteRule ^(.*)P(.*)$ http://%{HTTP_HOST}/$1p$2 [R=301,L]
RewriteRule ^(.*)Q(.*)$ http://%{HTTP_HOST}/$1q$2 [R=301,L]
RewriteRule ^(.*)R(.*)$ http://%{HTTP_HOST}/$1r$2 [R=301,L]
RewriteRule ^(.*)S(.*)$ http://%{HTTP_HOST}/$1s$2 [R=301,L]
RewriteRule ^(.*)T(.*)$ http://%{HTTP_HOST}/$1t$2 [R=301,L]
RewriteRule ^(.*)U(.*)$ http://%{HTTP_HOST}/$1u$2 [R=301,L]
RewriteRule ^(.*)V(.*)$ http://%{HTTP_HOST}/$1v$2 [R=301,L]
RewriteRule ^(.*)W(.*)$ http://%{HTTP_HOST}/$1w$2 [R=301,L]
RewriteRule ^(.*)X(.*)$ http://%{HTTP_HOST}/$1x$2 [R=301,L]
RewriteRule ^(.*)Y(.*)$ http://%{HTTP_HOST}/$1y$2 [R=301,L]
RewriteRule ^(.*)Z(.*)$ http://%{HTTP_HOST}/$1z$2 [R=301,L]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Теперь я не вижу ошибок и принимает запросы независимо от случая.
Если вы можете загрузить модуль mod_speling. использовать это:
RewriteEngine On
AllowOverride All
CheckSpelling on
В противном случае; если вы не можете (у вас нет контроля над этим), введите строчные URL-адреса с помощью mod_rewrite (как вы писали на ваш вопрос)
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
Поскольку ваш.htaccess находился внутри папки и теперь находится в корневом каталоге документа (public_html), попробуйте добавить свой переписать. Возможно, это была просто проблема, потому что это было не в корневом документе.