2013-02-11 2 views
15

Я работаю над веб-сайтом, который развертывается на сервере Linux. У меня есть небольшие изменения, чтобы сделать это. У меня есть папка read. Требование состоит в том, что если я ввожу URL-адрес localhost:80/tom/Read или ../READ или /read, ему необходимо перейти на read.php внутри папки read.Как сделать регистр символов нечувствительным к регистру Linux

Я создал файл .htaccess в корневом каталоге. Размещенные следующий код упоминается ниже в файле, видя страницу с mentioned here

RewriteEngine On 
RewriteBase /tom/ 

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

RewriteCond %{REQUEST_URI} ^system.* 
RewriteRule ^(.*)$ /index.php/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

RewriteRule ![A-Z] - [S=26] 
RewriteRule ^(.*)(A)(.*)$ $1a$3 [N,R=301] 
RewriteRule ^(.*)(B)(.*)$ $1b$3 [N,R=301] 
RewriteRule ^(.*)(C)(.*)$ $1c$3 [N,R=301] 
RewriteRule ^(.*)(D)(.*)$ $1d$3 [N,R=301] 
RewriteRule ^(.*)(E)(.*)$ $1e$3 [N,R=301] 
RewriteRule ^(.*)(F)(.*)$ $1f$3 [N,R=301] 
RewriteRule ^(.*)(G)(.*)$ $1g$3 [N,R=301] 
RewriteRule ^(.*)(H)(.*)$ $1h$3 [N,R=301] 
RewriteRule ^(.*)(I)(.*)$ $1i$3 [N,R=301] 
RewriteRule ^(.*)(J)(.*)$ $1j$3 [N,R=301] 
RewriteRule ^(.*)(K)(.*)$ $1k$3 [N,R=301] 
RewriteRule ^(.*)(L)(.*)$ $1l$3 [N,R=301] 
RewriteRule ^(.*)(M)(.*)$ $1m$3 [N,R=301] 
RewriteRule ^(.*)(N)(.*)$ $1n$3 [N,R=301] 
RewriteRule ^(.*)(O)(.*)$ $1o$3 [N,R=301] 
RewriteRule ^(.*)(P)(.*)$ $1p$3 [N,R=301] 
RewriteRule ^(.*)(Q)(.*)$ $1q$3 [N,R=301] 
RewriteRule ^(.*)(R)(.*)$ $1r$3 [N,R=301] 
RewriteRule ^(.*)(S)(.*)$ $1s$3 [N,R=301] 
RewriteRule ^(.*)(T)(.*)$ $1t$3 [N,R=301] 
RewriteRule ^(.*)(U)(.*)$ $1u$3 [N,R=301] 
RewriteRule ^(.*)(V)(.*)$ $1v$3 [N,R=301] 
RewriteRule ^(.*)(W)(.*)$ $1w$3 [N,R=301] 
RewriteRule ^(.*)(X)(.*)$ $1x$3 [N,R=301] 
RewriteRule ^(.*)(Y)(.*)$ $1y$3 [N,R=301] 
RewriteRule ^(.*)(Z)(.*)$ $1z$3 [N,R=301] 

Но это не работает.

Я новичок в среде Linux. Я не знаю о mod_speling. Это файл? Где он будет находиться на сервере Linux?

+1

Я спрашиваю спецификацию здесь. Это приведет к большему количеству проблем, например, с индексацией ботов. –

+0

Возможный дубликат [Нечувствительные к регистру URL-адреса с mod \ _rewrite] (http://stackoverflow.com/questions/1998156/case-insensitive-urls-with-mod-rewrite) –

+0

Да, это требование, вероятно, будет проблемой в сам. Тем не менее, есть модуль Apache, который может помочь (это тот, который может обрабатывать запросы, которые немного отключаются, и служить альтернативой ... Я забыл название) Редактировать: это 'MultiViews' –

ответ

25

Вы можете легко сделать сервер Apache игнорировать регистр с помощью модуля mod_speling, который является частью стандартного дистрибутива Apache:

CheckSpelling On 
CheckCaseOnly On 

После перезапуска HTTPD вы можете получить доступ к read в Read или READ или read.

+0

Привет, Hoeni .. Я поместил выше 2 строки кода в .htaccess с уже существующим кодом. Затем перезапустили. Это не работает. Любое предложение – sonorita

+0

Мне интересно, есть ли какие-либо соображения производительности при использовании этого. У меня есть большое приложение Sencha, у которого есть эта проблема. 390MB файлов всех смешанных случаев и ссылки по-разному повсюду. –

+19

Я единственный, кто считает это ироничным, что модуль для проверки орфографии имеет орфографическую ошибку? – Dave

18

Привет, я наконец получил решение. Размещенный ниже код в /etc/httpd/conf/httpd.conf.

LoadModule speling_module modules/mod_speling.so 

<IfModule mod_speling.c> 
    CheckSpelling On 
    CheckCaseOnly On 
</IfModule> 

Затем перезагрузите HTTPD:

sudo service httpd restart 

И, наконец, убедитесь, что он включен:

sudo httpd -M | grep speling 

Это должно дать speling_module (shared)

Спасибо за помощь для всех ..

+0

Директива IfModule не должна иметь никакого значения, поскольку это просто для того, чтобы избежать ошибок, когда вы ** не загружайте модуль. (Http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule). Если у вас есть ошибки без него, модуль mod_speling не загружается вообще. – hoeni

+2

Модуль 'speling', по-видимому, не включен по умолчанию в Debian (вероятно, Ubuntu). Чтобы включить его, используйте команду 'sudo a2enmod speling'. – Dave

+0

Я думаю, что неправильно написанный модуль абсолютно фантастичен. – ScottMcGready

1

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

Поместите этот код в файл .htaccess

AddType application/x-httpd-php .html .htm 
ErrorDocument 404 /404.php 

Я тогда создал PHP файл остроумие следующий ..

<?php 
$aurl = $_SERVER['REQUEST_URI']; 
$lurl = strtolower($aurl); 

if($aurl != $lurl){ 
header('location:'.$lurl); 
} else { 
header('location:/404.html'); 
} 
?> 

В основном он получает ссылающаяся URL -> магазины в $ aurl

затем он делает это в нижнем регистре -> хранится как $ lurl

если они ($ lurl)

Если это не удается, страница не существует, ссылающийся URL-адрес теперь тот же ($ lurl == $ aurl) , поэтому он перенаправляет на надлежащей странице 404 или может отобразить некоторый дополнительный код.

+1

Почему '} else {header ('location: /404.html'); } '? Разве это не нужно оставить в покое без перенаправления, если '$ aurl == $ lurl'? – tnschmidt

2

Сначала установите speling_module. Затем включают LoadModule speling_module modules/mod_speling.so в httpd.conf, а затем введите

<IfModule mod_speling.c> CheckSpelling On CheckCaseOnly On </IfModule>
в httpd.conf, затем перезапустите службу httpd с помощью службы httpd restart.

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