一些头传递变量?

一些头传递变量?

问题描述:

我试图将一些变量从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

+1

你问的是所谓_url rewriting_什么,它是一种常见的做法。例如,它使用Apache的mod_rewrite完成。 – 2012-02-06 20:27:11

+0

Codeigniter将做到这一点。 – 2012-02-06 20:27:24

+0

请参阅http://stackoverflow.com/search?q=%5Bphp%5D+rewriterule和http://httpd.apache.org/docs/current/mod/mod_rewrite.html – 2012-02-06 20:28:14

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

如果你有你的Web服务器上启用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中阅读更多关于此的内容。

+0

我试图把它放在.htaccess文件,但当我做请求时,它给了我这个错误:在这台服务器上找不到请求的URL /site.com/index.html。 – Zakukashi 2012-02-06 20:36:34

+0

当前代码只重写包含a-zA-Z0-9的文件请求。 'index.html'包含一个点,因此不会被重写。我刚刚更新了我的答案,以重写每个请求,除非请求的资源作为文件或目录存在。 – kba 2012-02-06 20:39:43

+0

非常感谢你的工作! – Zakukashi 2012-02-06 20:43:06

你需要使用URL重写来做到这一点。如果你使用Apache:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

在这种情况下,您通常使用.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/hellowww.site.com/index.php?link=hello。这种变化对用户是不可见的(他仍然会看到www.site.com/hello作为地址)。请注意,如果您尝试在CSS/JavaScript文件中使用相对路径,可能会造成麻烦。

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

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

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