2016-10-10 5 views
1

Доступ к file.php Письмо mydomain.com/file. Мне нужно иметь доступ и писать mydomain.com/FILE..htaccess не зависящие от регистра каталоги

В .htaccess я использую следующие правила, чтобы удалить расширение:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+ 
RewriteRule ^(.+)\.php $1 [R=301,L] 

Если это правило должно быть changed- это до вас.

+0

Это в частной сети. Мне нужно минимизировать ошибки пользователя. –

+0

Сохраните ваши файлы в нижнем регистре и с помощью 'RewriteMap' конвертируйте каждый URL в нижний регистр. (требуется доступ к конфигурации сервера Apache) – anubhava

+0

Файлы находятся в нижнем регистре. Какие изменения я должен внести в config, и как использовать RewriteMap? Не могли бы вы написать в форме ответа, чтобы я мог отметить это, если это правильно? –

ответ

1

Определить это RewriteMap в Apache или vhost конфигурации:

RewriteMap lc int:tolower 

Тогда внутри .htaccess есть дополнительное правило в нижний регистр заглавных URIs:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301,NE] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP [NC] 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,NC,NE] 

# convert each REQUEST_URI to lowercase 
RewriteRule ^(.*?[A-Z]+.*)$ /${lc:$1} [R=301,L,NE] 

# internally add .php 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
+0

Должен ли я писать 'RewriteMap lc int: tolower' в .htaccess или? Я проверю это завтра и напишу. Благодаря! –

+1

Нет, 'RewriteMap lc int: tolower' должен быть помещен в' httpd.con' или вашу конфигурацию vhost. 'RewriteMap' не разрешено из .htaccess – anubhava

-1

Используйте [NC] флаг в правилах

Использование [NC] флаг заставляет RewriteRule быть согласованы в без учета регистра. То есть, все равно, будут ли буквы отображаться в верхнем или нижнем регистре в согласованном URI.

https://httpd.apache.org/docs/current/rewrite/flags.html

+1

Это не сработает само по себе, так как «$ 1» будет заменен разными токенами для разных запросов. – arkascha

+0

Да, это не работает. –

-1

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

переписывания модуль Апача обеспечивает NC флаг для первого аспекта и несколько более сложный подход к второму:

RewriteEngine On 

# remove trailing slash (/) if no such folder exists 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /${lc:$1} [NC,L,R=301] 

# internally rewrite to a php script if it exists and convert to lower case 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ /${lc:$1}.php [NC,L] 

# redirect to .php-less link if requested directly 
RewriteRule ^(.+)\.php$ ${lc:$1} [NC,L,R=301] 

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

+0

Это не работает. Вы можете предложить еще один способ достижения этого –

+0

@TarlanMammadzada. Не хотите ли вы разработать то, что не будет работать, и _why_? Или вы просто «полагаете»? – arkascha

+0

Я проверил. Даже в нижнем регистре дает Внутренняя ошибка –

 Смежные вопросы

  • Нет связанных вопросов^_^