Mod rewrite 使用以下正则表达式重写url

Mod rewrite 使用以下正则表达式重写url,mod-rewrite,url-rewriting,Mod Rewrite,Url Rewriting,我正在尝试进行mod重写以获得以下url:localhost/test/index.php?您好 我为这个页面创建了一个名为hello.php的文件,它位于文件夹/test中 为了澄清,我有另一个页面,其中有一个指向我的hello.php的链接,但是什么是正确的url,以便我可以在url中显示localhost/test/index.php?当我单击链接访问我的hello.php页面时,在url中显示hello 以下内容似乎不正确: RewriteRule ^.*$ index.php?$1

我正在尝试进行mod重写以获得以下url:localhost/test/index.php?您好

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

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

以下内容似乎不正确:

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

如果您只想处理php文件,请尝试此操作

    RewriteEngine on
    RewriteRule (.*)\.php$ /index.php?$1 [L]
澄清我的答案是什么。它为您提供了更友好的URL,听起来就像您所要求的

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

您可以创建任何URL,它将重写为php文件。e、 g.
localhost/index.php?newpage
,您可以使用
/localhost/newpage.php

希望这更清楚

编辑

您希望相反,但我不知道PHP是如何构造的,但查询字符串通常是字段/值对。例如
name=john
page=contact
action=hello
等。您有
index.php?hello
hello
没有内容或值

这可能就是为什么你在写你的URL的时候会遇到如此困难的原因。使用
$\u GET
需要一个值

所以我要做的是,如果您的URL是这样的,使用字段/值对

index.php?action=hello
然后在index.php文件中,您可以执行以下操作

$action = $_GET["action"];

if($action == "hello"){
//show contents of hello, include a page or whatever
}
一旦你有了好的URL,重写它就很容易了

所以如果你想要显示的URL是

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

因此,我所有的URL都被重写为更短、更友好,就像我原来的答案一样

  • 2不需要.htaccess。在使用GET Parameter时,请在index.php中使用它:

    if (isset($_GET['hello'])) include('hello.php');
    

  • 这将在index.php中显示hello.php的内容。php

    请为我澄清,您是否希望hello.php显示在
    index.php?hello
    url?是的,我希望hello.php显示为index.php?当我单击指向该页面的链接时,您好您希望在地址栏中显示
    hello.php
    ,但被发送到
    index.php?您好
    ?如果你想建立一个友好的URL,你检查过我的答案吗?我试过你的。我如何测试?我只是输入localhost/test/index.php吗?您好。我现在弄糊涂了。它似乎不起作用。我输入localhost/test/index.php/?hello。它不会把我带到hello.php页面,它不是这样做的。我以为你像大多数人一样想要“友好的URL”。我的答案是允许您输入
    localhost/test/hello.php
    ,它将在内部重定向到
    index.php?hello
    ,您的用户将始终看到
    localhost/test/hello.php
    并且在回复时您需要输入我们的用户名,如@pjack,否则我们不会收到通知您留下回复。我只是碰巧看到了。哦,我明白了。有相反的顺序吗?我想看localhost/index.php?hello而不是localhost/hello.php。是这样吗?