使用以下正则表达式重写URL

时间:2013-06-30 07:28:01

标签: mod-rewrite url-rewriting

我正在尝试进行mod重写以获取此url:localhost / test / index.php?hello

我为这个页面创建了一个名为hello.php的文件,它位于文件夹/ test

为了澄清,我有另一个页面,其中包含指向我的hello.php的链接,但是正确的url是什么,所以当我点击链接访问我的网址时,我可以在url中显示localhost / test / index.php?hello hello.php页面。

以下似乎不对:

 RewriteRule ^.*$ index.php?$1 [L]

2 个答案:

答案 0 :(得分:0)

如果你想只做php文件,试试这个。

    RewriteEngine on
    RewriteRule (.*)\.php$ /index.php?$1 [L]

澄清我的回答。它为您提供了更友好的URL,听起来就像您要求的那样。

因此,您可以使用localhost/hello.phpinternally会重定向到/localhost/index.php?hello。在内部意味着他们永远不会看到localhost/index.php?hello,并且始终会在浏览器中看到localhost/hello.php

您可以执行任何URL,它将重写为php文件。例如localhost/index.php?newpage,您可以使用/localhost/newpage.php

希望更清楚。

修改

你想要反过来,但我不知道你的PHP是如何构造的,但查询字符串通常是字段/值对。例如name=johnpage=contactaction=hello等。您有index.php?hellohello没有内容或价值。

这可能就是为什么你在重写URL时遇到这么困难的原因。使用$_GET需要一个值。

那么我会做什么,如果您的网址是这样的,使用字段/值对

index.php?action=hello

然后在index.php文件中,您可以执行类似

的操作
$action = $_GET["action"];

if($action == "hello"){
//show contents of hello, include a page or whatever
}

一旦你有了很好的网址,就很容易重写它。

因此,如果您想要显示的网址是

index.php?action=hello并且您想将其重定向到hello.php

你的.htaccess看起来像这样

RewriteRule ^action=([^/]+) /$1.php [R,L]

那会将它重定向到php文件。如果您不想显示重定向并将其保留为内部重定向,则可以删除R标记并保留[L]

我个人希望用户看到真正长的查询字符串URL示例。 mysite.com?page=music&artist=someartist&title=sometitle

所以我的所有网址都被重写为更短,更友好,就像我原来的答案一样。

答案 1 :(得分:0)

  1. 你不需要.htaccess 2.只要你使用GET参数 - 在index.php中使用它:

    if (isset($_GET['hello'])) include('hello.php');
    
  2. 这将显示index.php

    中hello.php的内容