2016-11-03 186 views
0

我想創建URL不區分大小寫,我已經使用CheckSpelling On並且工作正常。 在並行我也希望刪除從URL擴展我申請不區分大小寫的URL重寫

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [NC,L] 

它還工作。 但兩者都不起作用。 如果我同時保持在htaccess它開始給錯誤300(「多種選擇」)

+0

什麼不工作?你能發佈導致300錯誤的uri嗎? – starkeen

+0

試圖使URL不區分大小寫,URL如下http://dev-sql.digitreck.com/dev/Login 它將工作如果使用http://dev-sql.digitreck.com/dev/Login.php或http://dev-sql.digitreck.com/dev/login.php –

回答

0

你讓自己很難。如果你在你的php中進行基本路由,會更容易。剛送什麼東西給你index.php這不是一個目錄,或者是不是一個文件或者是一個PHP文件:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f [OR] 
RewriteCond %{REQUEST_FILENAME} (?>.*)(?<=\.php) [NC] 
RewriteRule ^(?!index\.php$). index.php [NS,L] 

截至index.php頂部,做這樣的事情:

<?php 

$url = explode('?', $_SERVER['REQUEST_URI'], 2); 
$url = substr($url[0], 1); 
if ($url) { 
    $url = strtolower($url) . '.php'; 
    if (preg_match('@^[^./][^/]*(?:/[^./][^/]*)*[email protected]', $url) && file_exists($url)) { 
    . # does not contain dotfiles, nor `..` directory traversal, so is a php file below web root 
     include $url; 
    } 
    else { 
     # virtual URL doesn't exist, 
     # set 404 response code header and serve a default page 
     include '404.php'; 
    } 
    exit; 
} 

# no virtual URL, continue processing index.php 

添加rel=canonical對每個頁面的<head>包含小寫URL(與任何查詢字符串重新添加),所以你不會因爲重複的內容而受到懲罰,