一些标头传递变量?

时间:2012-02-06 20:24:35

标签: php

我试图将一些变量从URL传递给PHP脚本。现在我知道www.site.com/index.php?link=HELLO需要$_GET['link']来获取变量“link”。我希望在没有变量的情况下还有其他方法可以做到这一点。

例如,我想要一个像这样的链接结构:www.site.com/HELLO。在这个例子中我知道我必须创建一个名为Hello的目录放置一个索引文件,它应该可以工作,但我不想创建一个目录,我希望有一种方法可以“捕获”域之后的额外部分。我正在考虑创建一个自定义HTTP 404页面,它将以某种方式获取未找到页面的变量,但我不知道如何获取HTTP 404错误参数。是否有另一种更简单的方法来获取变量而不使用额外的?link=部分?我只是想让它成为像www.site.com/HELLO这样的结构。

4 个答案:

答案 0 :(得分:2)

你想要的是URL重写。你没有提到你正在使用什么样的网络服务器,所以我认为它是Apache。

如果您的网络服务器上启用了mod_rewrite,则可以通过在文档根目录中使用以下内容创建.htaccess文件轻松完成此操作

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1

这将使所有与正则表达式[a-zA-Z0-9]+匹配的请求转发到index.php。例如,如果您尝试访问domain.com/hello,PHP会将此解释为尝试访问index.php?request=hello

您可以在Apache HTTP Server manual about mod_rewrite

中详细了解相关信息

答案 1 :(得分:2)

在这种情况下,您通常使用.htaccess以某种形式更改URL。例如:

RewriteEngine On                             #Enable Rewrite
RewriteCond %{REQUEST_FILENAME} !-f          #If requested is not an existing file
RewriteCond %{REQUEST_FILENAME} !-d          #If requested is not an existing directory
RewriteRule ^(.*)$ /index.php?link=$1 [L]    #Preform Rewrite

www.site.com/hello改为www.site.com/index.php?link=hello。此更改对用户不可见(他仍会将www.site.com/hello视为地址)。请注意,如果您尝试使用CSS / JavaScript文件的相对路径,可能会造成麻烦。

答案 2 :(得分:0)

您需要使用URL重写来执行此操作。如果您使用的是Apache:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

答案 3 :(得分:0)

你可以用mod-rewrite结构来做到这一点。

这是一个非常好的教程,介绍如何使用php / apache进行设置。

http://www.sitepoint.com/guide-url-rewriting/