我试图将一些变量从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
这样的结构。
答案 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
。
答案 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进行设置。