【问题标题】:Clean URL with php and apache [duplicate]使用 php 和 apache 清理 URL [重复]
【发布时间】:2012-01-17 09:36:01
【问题描述】:

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

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

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

我想要这个文件的 cleanurls: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——而不是对每个文件重复 rewritecond。我该怎么做?

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

【问题讨论】:

  • 不要使用记事本,改用notepad++,它是专为编辑代码而设计的,可以毫无问题地处理各种行尾和文件类型。
  • 只是为了澄清你的问题; C:\wamp\www\Personal_site\Root_fold\Tutorials\C_sharp\C_loginapp 指的是您的本地文件系统,但 http://localhost/Tutorials/C_Sharp/C_loginapp 是您的本地 Web URL,我怀疑这是您希望完成重写的地方。
  • @mario 嗨,你几乎给了我一些想法,但很抱歉无法捕捉到它们我如何将它应用于我的网站,因为我已经给了你文件路径和文件名......
  • 您的文件路径不相关。

标签: php apache


【解决方案1】:

干净的 URL 不仅仅是隐藏 .php 扩展名。它还需要合并查询参数,以便看起来像 /article/foobar 而不是 /article?title=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 编写的完整应用程序。当您转到&lt;yourhost&gt;/hello/JackyBoi 时,它会回复Hello JackyBoi

您可以使用 Silex 做更高级的事情 - 详细信息在文档中。当你长大了,你自然可以毕业到它的大哥 Symfony2。

【讨论】:

  • 好吧,这很令人困惑,你能给我一个关于在 .htacess 文件中放入什么的代码吗?
  • 根据您对示例的要求更新了答案。
  • 嘿,tks 人,但想知道如何添加我已经下载的 silex.phar 文件,但我应该把它放在哪里?
  • 将其与index.php.htaccess 放在同一个文件夹中——这是一种简单的开始方式。一旦您设法运行此应用程序,您就可以通过将 silex.phar 文件移出文档根目录并相应地更新 require_once 语句来进行试验——这样您的应用程序会更安全。
【解决方案2】:

将此添加到您的 .htaccess:

 Options +MultiViews

删除所有重写规则。然后你可以使用不带.php 扩展名的URL(不是文件名!!)。

【讨论】:

  • 仍然无法隐藏扩展名 .php 我做错了吗?我刚刚尝试了 Options -Indexes,这是有效的,因为它没有向我显示文件夹中的文件
  • 需要 mod_negotiate。也没有人能说出你做错了什么,除非你把你的步骤具体化。
  • 好的,那么我会告诉你我做得更好的地方首先,我在我的 index.php 所在的根文件夹中创建了一个 .htacess 文件,然后我有一个名为 Tutorials 的文件夹以及一个名为 Csharp 的子文件夹和 .php 文件。在根文件夹中的 .htacess 中,我将您的行选项 +MultiViews 并刷新了我的 .php 页面,但没有隐藏扩展名
  • 这两个选项都不会为您隐藏扩展程序。它只重写 incoming 请求,而不是传出页面。自己调整链接。
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多