使用php和apache清理URL

时间:2011-12-10 12:44:17

标签: php apache

  

可能重复:
  Rewrite all queries to not need the .php extension using a mod_rewrite RewriteRule

我正在学习如何创建网站,并希望得到一些帮助。

我在wamp文件夹中有这个路径:C:\wamp\www\Personal_site\Root_fold\index.php(主文件从这里开始)。

我希望这个文件有清洁:C:\wamp\www\Personal_site\Root_fold\Tutorials\C_sharp\C_loginapp.php,我希望它显示为C:\wamp\www\Personal_site\Root_fold\Tutorials\C_sharp\C_loginapp - 同一个文件,但最后没有.php。

我也希望这发生在我网站上的每个其他文件中 - 甚至是index.php - 而不会为每个文件重复重写。我该怎么做?

顺便说一句,我在我的计算机上本地运行 - 没有托管服务或类似的东西 - 而且我也是通过在记事本中打开它并保存名为“.htacess”的文件来创建.htaccess文件,这意味着它强制文件以.htacess扩展名保存。

2 个答案:

答案 0 :(得分:3)

清除网址不仅仅是隐藏.php扩展名。它还需要包含查询参数,因此它不是/article?title=foobar,而是/article/foobar

这个问题一遍又一遍地得到解决。请不要参与PHP社区的普遍Not invented here综合症,并使用其中一个existing solutions available。它会让你成为一个更好的程序员,因为今天的编程是巧妙地将现有组件与你独特的域逻辑相结合,而不是从头开始编写所有内容。

<强>更新

由于您刚刚开始,可能很难开始使用像Symfony2这样的完整框架 - 但我建议您在使用PHP时更加熟悉它。

目前,Silex微框架可能是一个良好的开端。这很容易入手。举个简单的例子,这是你的index.php文件:

require_once __DIR__.'/silex.phar'; 

$app = new Silex\Application(); 

$app->get('/hello/{name}', function($name) use($app) { 
    return 'Hello '.$app->escape($name); 
}); 

$app->run(); 

这是你的.htaccess

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

这是一个用Silex编写的完整应用程序。当您转到<yourhost>/hello/JackyBoi时,它会回复Hello JackyBoi

你可以用Silex做更多高级的东西 - 详细信息在文档中。当你长大了,你可以自然地毕业于更大的兄弟Symfony2。

答案 1 :(得分:0)

将此添加到.htacceess:

 Options +MultiViews

删除所有重写文件。然后,您可以使用不带.php扩展名的网址(不是文件名!!)。