2013-02-11 24 views
15

Tôi đang làm việc một trang web được triển khai trên máy chủ Linux. Tôi có những thay đổi nhỏ để làm điều đó. Tôi có thư mục read. Yêu cầu là nếu tôi nhập URL localhost:80/tom/Read hoặc ../READ hoặc /read, cần điều hướng đến read.php bên trong thư mục read.Làm cách nào để làm cho URL không phân biệt chữ hoa chữ thường trong máy chủ Linux

Tôi đã tạo tệp .htaccess trong thư mục gốc. Đặt mã sau đây đề cập bên dưới trong tệp bằng cách xem trang 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] 

Nhưng nó không hoạt động.

Tôi mới sử dụng môi trường Linux. Tôi không biết về mod_speling. Đó có phải là một tập tin không? Nó sẽ nằm ở đâu trong máy chủ Linux?

+1

Tôi sẽ đặt câu hỏi ở đây. Điều này sẽ dẫn đến nhiều vấn đề hơn, ví dụ như với việc lập chỉ mục bot. –

+0

có thể trùng lặp của [Trường hợp URL nhạy cảm với mod \ _rewrite] (http://stackoverflow.com/questions/1998156/case-insensitive-urls-with-mod-rewrite) –

+0

Vâng, yêu cầu có thể là một vấn đề trong chinh no. Điều đó nói rằng, có một mô-đun Apache có thể giúp (đó là một trong đó có thể đối phó với các yêu cầu mà là một chút tắt, và phục vụ một thay thế ... Tôi quên tên) Edit: đó là 'MultiViews' –

Trả lời

25

Bạn có thể dễ dàng thực hiện các webserver apache bỏ qua các trường hợp bằng cách sử dụng các mô-đun mod_speling, mà là một phần của sự phân bố apache tiêu chuẩn:

CheckSpelling On 
CheckCaseOnly On 

Sau khi khởi động lại httpd bạn có thể truy cập vào read như Read hoặc READ hoặc read.

+0

Hi Hoeni .. Tôi đã đặt 2 dòng mã ở trên .htaccess với mã đã có. Sau đó khởi động lại. Nó không hoạt động. Bất cứ đề nghị – sonorita

+0

Tôi tự hỏi nếu có bất kỳ cân nhắc hiệu suất khi sử dụng này. Tôi có một ứng dụng Sencha lớn có vấn đề này. 390MB tập tin tất cả các trường hợp hỗn hợp và tham chiếu khác nhau trong suốt .. –

+19

Tôi có phải là người duy nhất thấy nó mỉa mai rằng mô-đun để kiểm tra lỗi chính tả là sai chính tả không? – Dave

18

Xin chào tôi đã nhận được giải pháp cuối cùng. Đặt mã bên dưới vào /etc/httpd/conf/httpd.conf.

LoadModule speling_module modules/mod_speling.so 

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

Sau đó khởi động lại httpd:

sudo service httpd restart 

Và cuối cùng xác minh nó được kích hoạt:

sudo httpd -M | grep speling 

Điều đó sẽ mang lại speling_module (shared)

Thanks for the help cho tất cả ..

+0

Chỉ thị IfModule sẽ không tạo ra sự khác biệt nào vì nó chỉ là để tránh lỗi khi bạn ** không ** tải mô-đun. (http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule). Khi bạn có lỗi mà không có nó, mô-đun mod_speling sẽ không được nạp. – hoeni

+2

Mô-đun 'speling' dường như không được bật theo mặc định trên Debian (có thể là Ubuntu). Để cho phép nó sử dụng lệnh 'sudo a2enmod speling'. – Dave

+0

Tôi nghĩ rằng các mô-đun được viết sai chính tả là hoàn toàn tuyệt vời. – ScottMcGready

1

Hi không chắc chắn nếu điều này giúp nhưng đây là workabout đơn giản tôi đã sử dụng, nó sử dụng một trang php rất cơ bản nhưng nó hoạt động cho các trang web tôi cần nó.

Nơi mã này trong các tập tin htaccess

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

Tôi đã sau đó tạo ra một wit tập tin php như sau ..

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

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

Về cơ bản nó được url giới thiệu -> cửa hàng như $ aurl

sau đó làm cho chữ thường -> cửa hàng là $ lurl

nếu chúng không phù hợp với nó, sau đó sẽ hiển thị url chữ thường ($ lurl)

Nếu trang không tồn tại, url tham chiếu bây giờ giống nhau ($ lurl == $ aurl) để sau đó chuyển hướng đến trang 404 phù hợp hoặc có thể hiển thị thêm một số mã ..

+1

Tại sao '} else {header ('location: /404.html'); } '? Không nên chỉ để lại một mình mà không cần chuyển hướng nếu '$ aurl == $ lurl'? – tnschmidt

2

Cài đặt speling_module đầu tiên. Sau đó, bao gồm LoadModule speling_module modules/mod_speling.so trong httpd.conf tệp và sau đó bao gồm

<IfModule mod_speling.c> CheckSpelling On CheckCaseOnly On </IfModule>
trong httpd.conf, sau đó khởi động lại dịch vụ httpd bằng cách sử dụng dịch vụ httpd restart lệnh.