我甚至不知道如何调用这个方法,我只知道我想要实现的行为。如何使用目录名称作为选项或参数?
我的例子是Facebook。如果你去facebook.com/[username or id]
你进入个人资料页面,但我无法想象他们正在创建一个目录在他们的根文件夹中,并为每个用户放置一个索引文件。
那么如何完成以下行为;你去somepage.com/foo/bar/hello
但实际上你要求somepage.com/foo?bar=hello
?
这甚至有可能与Apache和PHP?
我甚至不知道如何调用这个方法,我只知道我想要实现的行为。如何使用目录名称作为选项或参数?
我的例子是Facebook。如果你去facebook.com/[username or id]
你进入个人资料页面,但我无法想象他们正在创建一个目录在他们的根文件夹中,并为每个用户放置一个索引文件。
那么如何完成以下行为;你去somepage.com/foo/bar/hello
但实际上你要求somepage.com/foo?bar=hello
?
这甚至有可能与Apache和PHP?
我甚至不知道如何调用这个方法,我只知道我想要实现的行为。
这个东西被称为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。
通常这是用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。
我希望有帮助!
是的,看看Apache的'mod_rewrite'和'.htaccess'文件 – nickhar
这个东西叫做URL。即使它可以映射到目录,它也不能。如何处理URL完全被收到的网络服务器隐藏。在HTTP标准中没有任何地方说它必须存在某种类型的目录结构。 – hakre
http://tools.ietf.org/html/rfc3986和http://tools.ietf.org/html/rfc2616往往很好理解与URL重写和与您的网络服务器和网页浏览器交互PHP脚本。 – hakre