2012-10-27 42 views
-1

我甚至不知道如何调用这个方法,我只知道我想要实现的行为。如何使用目录名称作为选项或参数?

我的例子是Facebook。如果你去facebook.com/[username or id]你进入个人资料页面,但我无法想象他们正在创建一个目录在他们的根文件夹中,并为每个用户放置一个索引文件。

那么如何完成以下行为;你去somepage.com/foo/bar/hello但实际上你要求somepage.com/foo?bar=hello

这甚至有可能与Apache和PHP?

+0

是的,看看Apache的'mod_rewrite'和'.htaccess'文件 – nickhar

+1

这个东西叫做URL。即使它可以映射到目录,它也不能。如何处理URL完全被收到的网络服务器隐藏。在HTTP标准中没有任何地方说它必须存在某种类型的目录结构。 – hakre

+0

http://tools.ietf.org/html/rfc3986和http://tools.ietf.org/html/rfc2616往往很好理解与URL重写和与您的网络服务器和网页浏览器交互PHP脚本。 – hakre

回答

2

我甚至不知道如何调用这个方法,我只知道我想要实现的行为。

这个东西被称为URI/URL,它的本地部分被传递给一个web服务器。网络服务器然后处理请求。

这甚至有可能与Apache和PHP?

是的。甚至没有。这是一个Web服务器的用途。服务器上发生的事情完全由HTTP协议屏蔽,HTTP协议只知道URI/URL规范,该规范不规定是否需要与Web服务器上的具体进程或文件匹配。

例如,对于Apache HTTP Server,有一个名为Mod_Rewrite的着名模块进行URL重写。通常,浏览器的用户不会注意到这一点。

示例配置与PHP文件(apache httpd的):

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ app.php [QSA,L] 
</IfModule> 

在PHP脚本,你可以通过使用特殊变量像$_SERVER['REQUEST_URI'] and $_SERVER['QUERY_STRING']获得URI/URL。

1

通常这是用mod rewrite进行的。在那里你可以制作一个脚本变量的“路径”。

E.g. http://example.com/user/1/edit可以与国防部重写被翻译为http://example.com/index.php?function=edit&userid=1

这样的规则是这样的:

RewriteEngine on 
RewriteRule ^/user/([0-9]+)/([a-z]+)$ index.php=function=$2&userid=$1 [L] 

第一行激活重写模块的第二行有一个正则表达式重写URL必须匹配内部。如果你喜欢,你也可以使用外部[L][R]修饰符instad。

看看整个documentation了解更多。

在breckets中的东西是所谓的旗帜也是well documentated

我希望有帮助!

相关问题