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

我有http://example.com和PHP路由类,检查是否存在一些URL。
我想做一个新的路线,这是:

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

但是只要我打开它,Apache就会将我redirect到一个错误页面。 所以我使用.htaccess。 代码是:

重写引擎

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

它工作,只要我使用http://example.com/foo ,但一旦我添加一些其他参数,它redirect到一个错误。

我猜测重写代码是错误的。 这是错的吗?
如果是的话,你能build议我好吗?
如果不是,问题可能在哪里?

你可以用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 ) 
 RewriteRule ^(.*)$ /$1.php [L] 

像这样尝试。 在你.htaccess每个请求不是在磁盘上的文件被重定向到index.php,我猜index.php进一步重定向。 我不认为你只用一行代码就可以得到这个路由/ foo / bar / 123或/ foo / bar。 每个页面都需要自己的重写规则。 你可以再详细一点吗?

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

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

从Apache 2.2.16开始:

 FallbackResource /index.php