URL重写,不区分大小写

时间:2016-11-03 04:30:24

标签: url mod-rewrite url-rewriting

我想创建一个不区分大小写的URL,我已经在使用CheckSpelling On,它运行正常。 在并行中我还希望从我应用的URL中删除URL的扩展名

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

它也有效。 但两者都不起作用。 如果我将两者都保留在htaccess中它会开始给出错误300(“多项选择”)

1 个答案:

答案 0 :(得分: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('@^[^./][^/]*(?:/[^./][^/]*)*$@', $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>,这样您就不会因重复内容而受到处罚,