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