2013-05-05 90 views
1

我正在開發一個私人項目,它基本上是一個個人檔案系統。 現在我一直在嘗試如何改進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

我已經在Stackoverflow和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

回答

1

要提取斜線之間的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