如果你只想做 php 文件,试试这个。
RewriteEngine on
RewriteRule (.*)\.php$ /index.php?$1 [L]
澄清我的回答是做什么的。它为您提供更友好的 URL,听起来就像您所要求的。
所以你可以使用localhost/hello.php
它,它将被internally
重定向到/localhost/index.php?hello
. 内部意味着他们永远不会看到localhost/index.php?hello
并且将永远localhost/hello.php
在他们的浏览器中看到。
您可以执行任何 URL,它将重写为 php 文件。例如localhost/index.php?newpage
,您可以使用/localhost/newpage.php
希望这更清楚。
编辑
您想要相反,但我不知道您的 PHP 是如何构造的,但查询字符串通常是字段/值对。例如name=john
,page=contact
等action=hello
。你有index.php?hello
但hello
没有内容或价值。
这可能就是为什么你甚至很难重写你的 URL。使用$_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 都被重写为更短更友好,就像我原来的答案一样。