将所有请求重定向到index.php WITHOUT .htaccess

时间:2014-02-15 18:29:40

标签: php

我目前正在使用以下内容将所有请求重定向到index.php文件:

<IfModule mod_rewrite.c>
RewriteEngine on

# base path, if not the root directory
RewriteBase /dev/public/

# direct all requests to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
</IfModule>

虽然这有效,但它限制了我的代码只能在启用了mod_rewrite的服务器上运行。所以我想知道,有没有办法在不使用.htaccess的情况下模拟这种行为?其他框架如何做到这一点?

3 个答案:

答案 0 :(得分:1)

你可以写一个简短的PHP脚本:

<?php
    header( 'Location: index.php' ) ;
?>

并将其包含在除index.php

之外的所有php文件的顶部

答案 1 :(得分:1)

如果您不想使用htaccess,您可以将所有链接设为index.php?c=products&m=view&id=345,这样您的所有请求都会以任何方式转到index.php而您不需要htaccess

答案 2 :(得分:1)

像雅虎这样的主机不允许.htaccess,这可能有点令人沮丧。据我所知,这样的重定向是不可能的,但这是一种解决方法:

有这个文件结构:

index.php
private/ <-- you could do: password protect, set permissions, name with hard to guess string, etc
public/

因此,访问example.com/page会输出404,但您可以将您的网址重做为example.com/index.php/page 这是我用来获取数组中的URI args的内容:

$uri_args = 
       explode('/', substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], 'index.php') + 10));

可选择删除空args: array_filter($uri_args);

请参阅我的问题:How To Rewrite URL in PHP Only?
(另请参阅http://php.net/manual/en/reserved.variables.server.phpRemove empty array elements