如何通过.htaccess在URL中允许三个可选参数?

时间:2010-12-28 00:42:57

标签: php apache .htaccess mod-rewrite

我有http://example.com和一个PHP路由类,用于检查是否存在某个URL。
我想制作一条新路线,即:

http://example.com/foo/bar/123

但只要我打开它,Apache就会将我重定向到错误页面。所以我正在使用.htaccess。代码是:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)  /index.php [L]

并且只要我使用http://example.com/foo,它就可以工作,但是一旦我添加了一些其他参数,它就会将我重定向到错误。

我猜测重写代码是错误的。这是错的吗?
如果是的话,你能告诉我一个好的吗?
如果不是,可以找到问题所在?

4 个答案:

答案 0 :(得分:2)

您可以使用php处理URI:

htaccess的:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

PHP:

if (isset($_SERVER['REQUEST_URI']))
{
    $params = explode("/", ltrim($_SERVER['REQUEST_URI'], "/"));
    print_r($params);
}

example.com/just/these/params

输出:

Array
(
    [0] => just
    [1] => these
    [2] => params
)

答案 1 :(得分:0)

RewriteRule ^(.*)$  /$1.php [L]

试试这样。在你.htaccess中,每个不是磁盘上文件的请求都被重定向到index.php,我猜测index.php正在进一步重定向。我认为只用一行代码就可以得到这条路线/ foo / bar / 123或/ foo / bar。每个页面都需要它自己的重写规则。你能更具体一点吗?

答案 2 :(得分:0)

我想这可能会有所帮助。 “/index.php”将委托给错误的路径。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

答案 3 :(得分:0)

自Apache 2.2.16以来:

FallbackResource /index.php