Mod重写get vars

问题描述:

我正在开发一个私人项目,它基本上是一个个人档案系统。 现在我一直在尝试如何改进URL格式。Mod重写get vars

在这一刻,我使用的URL看起来像:

- >http://example.com/overview
- >http://example.com/profile/?name=foo
- >http://example.com/jobs/?name=foo

貌和个人资料都在我的网站目录,其中包含一个单个index.php文件,其中包含应从数据库中检索的PageID。

现在,我的目标是URL格式的东西如:

- >http://example.com/foo OR http://example.com/profile/foo
- >http://example.com/foo/jobs OR http://example.com/profile/foo/jobs

反正用的mod_rewrite做到这一点?

这将意味着原始网址看起来像http://example.com/?character=foo/jobs这是http://example.com/get_var/directory

我已经在*和Google上搜索' mod_rewrite获取变量'。但似乎没有什么是我想看到的事情。

此致
Larssy1

+0

因此,没有最终用户看到的网址,什么网址你们的服务器最终处理? – 2013-05-05 20:48:03

+0

用户看到:http://mysite.com/profile/Foo/jobs ,,服务器句柄:http://mysite.com/profile/jobs/?character=Foo – larssy1 2013-05-05 21:10:09

要提取斜线之间的URI的部分和追加它作为一个URL参数,使用表达式([^/]+)捕获所有字符,直到但不包括下一个/$1

RewriteEngine On 
RewriteRule ^profile/([^/]+)/([^/]+/?)?$ profile/$2?character=$1 [L] 

上述规则将动态地捕捉你的例子接下来Foo,这意味着无论随后/jobs/other/somethingelse,它将作为/profile/somethingelse?character=Foo追加。如果这是没有必要的,而且/jobs是静态的,你不需要把它捕捉到$2

RewriteEngine On 
# Don't dynamically capture what comes after the first variable group... 
RewriteRule ^profile/([^/]+)/jobs$ profile/jobs?character=$1 [L] 
+0

如果我有50页功能是这样的,那么这意味着我必须为每个页面添加一个RewriteRule? – larssy1 2013-05-06 10:44:03

+0

@ larssy1不,他们有什么不同?最高规则将代替'/ jobs'的任何值。如果'/ profile'发生变化,那么也可以解决,但我需要示例。 – 2013-05-06 11:05:51

+0

一些例子是:*/profile/Foo/jobs,*/profile/Foo/about,*/profile/Foo,*/profile/Foo/preferences。你的代码中存在一个缺陷,它说*/profile/Foo/jobs和*/profile/Foo/jobs /是不同的URL,如何使最后/可选? – larssy1 2013-05-06 11:21:12