如何重写URL以使其更短,并且不在地址栏中显示任何GET变量


How do I rewrite URLs to make them shorter and not show any GET variables in the address bar

我在单个index.php页面上有一个链接结构,比如index.php?lang=eng&主题=黑暗&例如,page=商店。我确实需要从链接中获取GET变量,为每个访问的页面提供适当的内容和配置。然而,我只想显示页面的名称,比如default.php,或者如果可能的话,如果页面=shop,我想显示shop.php,如果页面=chat,我想展示chat.php。有人能推荐我该用什么技巧吗?

如果您想这样做,您应该使用POST而不是GET,因为它不会在URL栏中显示其变量。

在PHP中,您可以通过使用$_POST['var']而不是$_GET['var']来查找POST变量的值,但如果它们不会显示在URL中,您将如何首先使用打开它们?

答案是使用一个看起来像普通链接的表单,其中的元素作为PHP POST内容的变量。这里有一个例子:

...
<form name="openPage2" method="post" action="path/to/page2.php">
   <input type="hidden" name="lang" value="en" />
   <input type="submit" value="Page 2"/>
</form>
...

现在,这将做的非常简单。假设包含此表单的当前页面为mywebsite.com/index.php。有一个标签为Page 2的按钮,表单中的其他内容都被隐藏了。单击第2页时,浏览器将转到mywebsite.com/path/to/page2.php,URL栏中没有任何可见的变量。但是,我们已经将隐藏的输入放入表单中,当您单击第2页时,表单将作为POST提交。意思是,在第2页上,你可以这样做来获得语言:

...
<?php
    $lang = $_POST['lang'];
    setLang($lang);
?>
...

$lang现在将是"en",因为这是形式值。您可以随意放置任意多的隐藏输入,它们都不会显示在URL栏中,因为它们是POST,而不是GET。

希望有帮助!