可能重复:
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扩展名保存。
答案 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
扩展名的网址(不是文件名!!)。