2013-10-27 30 views
1

信息htaccess的多變量有一個「虛擬」目錄

我目前正在自己​​的網站更加搜索引擎友好的,爲此我的索引頁接受以下$_GET['']請求。

example.com/Variable1/staticword/Variable2

example.com/Variable1/staticword/Variable2/Variable3/

example.com/Variable1/staticword/Variable2/Variable3/Variable4

example.com/Variable1/staticword/Variable2/Variable4

對於實施例

example.com/Arsenal/vs/Chelsea

example.com/Arsenal/vs/Chelsea/Emirates/

example.com/Arsenal/vs/Chelsea/Emirates/3048

example.com/Arsenal/vs/Chelsea/3048

問題

是否有可能有一個 「虛擬」 的目錄,在這種情況下/vs/的網址是什麼?或者我應該將它作爲另一個變量,以便用戶不能將其更改爲他們喜歡的任何內容,並且該網站仍然有效?如www.example.com/Arsenal/ANYTHINGUSERWANTSHERE/Chelsea

在這兩種情況下,我努力讓一個htaccess文件爲多個變量工作,我需要多個重寫規則還是隻能接受它們的一個,儘管它們可能都不存在?

(關於這兩種情況下的最後一個例子,我將允許用戶跳過Variable3/Stadium值的方式是可能存在的變量是帖子ID,因此我可以執行簡單的檢查以查看如果$ _GET是整數或不)

謝謝!問題將盡快回答。

回答

1

example.com/Variable1/staticword/Variable2/Variable4是一個具有目錄結構的網址。您只需將可變部分與正則表達式匹配(例如,([^/]+)),然後僅使用字符匹配靜態部分。這些都應該是內部重寫。你必須首先匹配最複雜的網址結構,然後從那裏開始工作。您將其重寫爲處理請求的文件。

最簡單的方法是針對每個案例分別制定規則,因爲在這種情況下,您不必爲了匹配所有請求而製作瘋狂的正則表達式。

以下規則是未經測試,但希望應該工作:

RewriteEngine on 
RewriteBase/
RewriteRule ^([^/]+)/vs/([^/]+)/([^/]+)/([0-9]+)/?$ /path/to/file.php?var1=$1&var2=$2&place=$3&id=$4 [L] 
RewriteRule ^([^/]+)/vs/([^/]+)/([0-9]+)/?$ /path/to/file.php?var1=$1&var2=$2&id=$3 [L] 
RewriteRule ^([^/]+)/vs/([^/]+)/([^/]+)/?$ /path/to/file.php?var1=$1&var2=$2&place=$3 [L] 
RewriteRule ^([^/]+)/vs/([^/]+)/?$ /path/to/file.php?var1=$1&var2=$2 [L] 

您可能需要每個規則之前添加下面的RewriteCond(銀行足球比賽),以防止它匹配/path/to/file.php

RewriteCond %{REQUEST_URI} !^/path/to/file\.php$ 

你可以找到更多的信息in the documentation

+0

完美的作品,以及你如何使用正則表達式來查看第三個變量是id(數字)還是place(文本)是天才,並且可以幫助我在PHP中節省時間!謝謝! – Harry