.htaccess重定向(重写)不使用真实文件路径重定向

时间:2015-12-17 23:27:51

标签: apache .htaccess mod-rewrite

我需要所有的网址重定向到index.php,我有一个处理url页面的路由器,所以如果有人进入路径(甚至是真正的路径),它会重定向到index.php:

Options -Indexes

DirectoryIndex index.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^inmomarco.com$
RewriteRule (.*) http://www.inmomarco.com/$1 [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

它没有使用真实路径,如果我在/pages/file.php中有一个文件,并且我尝试导航到它就不能使用上述规则,为什么?

在index.php中,我得到了uri并逃脱了它:

$url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// some security checks
// an array with the uri as keys and page names as values

在main.php中我包含了页面

$include = '/404';

if (array_key_exists($url, $includes)) {
    $include = $url;
}

include($includes[$include]);

这工作正常,问题是index.php未解析的真实文件路径(在url栏中)。这应该发生吗?或者我能做些什么?

此外,如果我尝试导航到/index.php,它将显示我的404页面,但如果我转到另一个文件,它将显示它并且index.php不会做他的工作......

1 个答案:

答案 0 :(得分:1)

.htaccess

中使用
RewriteEngine On
RewriteCond %{HTTP_HOST} ^inmomarco.com$
RewriteRule (.*) http://www.inmomarco.com/$1 [R=301,L]
RewriteBase /
RewriteRule !^index\.php$ /index.php [L]

因为-f-d测试现有文件或目录