如何让所有的URL通过一个PHP文件运行?

如何在这些forms的url的MVC系统强制通过一个单一的index.php文件的所有请求?

http://www.example.com/foo/bar/baz http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object http://www.example.com/hey/you 

编辑:当我尝试下面的重写规则,我得到这个错误:

 [error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1 [error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1 

编辑:哦,这是/index.php的完整内容。 当我删除重写规则时,它输出“/”或“/index.php”,或者我得到一个404其他任何东西。

 <?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> 

求解:我在重写规则中的index.php前面添加了一个/然后它工作:

重新求解:结果只是因为我正在运行2.2.4。 当我升级到2.2.11时,/不再需要。

如果您使用的是Apache,请使用mod_rewrite重写:

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA] 

这将透明地将您的URL重写为»index.php?q = foo / bar / baz。

如果指向现有文件或目录,则2.和3.行指示重写引擎不要重写URL。 这对于访问由httpd服务器提供的真实文件是必要的。

下面的代码使用Apache的mod_rewrite来重写所有不指向要映射到index.php的物理文件或目录的URL。 最终结果将是:

 http://www.example.com/index.php/foo/bar/baz http://www.example.com/index.php/goo/car/caz/SEO-friendly-name-of-the-object http://www.example.com/index.php/hey/you 

重写规则:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [PT,L,QSA] 

说明:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 

上述两行都规定这个规则不适用于普通文件(-f)或目录(-d)。

 RewriteRule ^(.*)$ index.php/$1 [PT,L,QSA] 

有关如何创buildmod_rewrite规则的更多信息可以从Apache网站获取: http : //httpd.apache.org/docs/2.2/mod/mod_rewrite.html 。