我有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
,它就可以工作,但是一旦我添加了一些其他参数,它就会将我重定向到错误。
我猜测重写代码是错误的。这是错的吗?
如果是的话,你能告诉我一个好的吗?
如果不是,可以找到问题所在?
答案 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