2017-09-29 23 views
-1

我想重定向基於URL中的項目可以採取多個參數。重定向並使用爆炸而不是獲取變量值到模型中

我的目標URL是

http://mywebsite/2623-Sq-Ft-Office-for-Rent-In-Pinnacle-Business-Park-Prahlad-Nagar-Ahmedabad-For-Rs-1.44-Lakh-Per-Month-prid-5102 

我的源URL是

http://mywebsite/views/propertyview.php?property_id=5102 

PRID-5102和PROPERTY_ID = 5102指的是相同的,並且可以取不同的值等5103,5104或5105等上。基本上我想在prid之前忽略所有內容,並指向目標url並將prid之後的數值傳遞給目標url。

的下面似乎工作,但我想(用爆炸來獲得的意見,如果這是做

的.htaccess

RewriteRule ^(.*)prid-([0-9]+)$ views/propertyview.php?property_id=$1 [NC,L] 

PHP模型的正確途徑,而不是獲得)

$c = explode('prid-',$_SERVER[ 'REQUEST_URI' ]); 
$result = explode('/', end($c)); 
echo $result[0]; 
+0

我不相信這個RewriteRule ^(。*)prid - ([0-9] +)$ views/propertyview.php?property_id = $ 1 [NC,L]可以工作。乙醚你必須使用$ 2而不是$ 1,或者你必須將匹配標準改爲^。* prid - ([0-9] +)$ – Webdesigner

+0

請不要在每個視圖分鐘更改您的問題主題?首先,你想用.htacces和mod-rewitre解決這個問題......現在你正在尋找一個PHP解決方案......你真正想要什麼? – Webdesigner

+0

@Webdesigner它的工作你可以相信你喜歡的任何東西 – Pichai

回答

1

你必須根據你所請求的URI而不是查詢字符串(這是什麼?)。

然後我會稍微改進你的匹配標準。 prid-([0-9]+)將意味着您的URI中的「prid-」一詞應該後跟一個或無限數字任意位置的任何地方。這應該只工作,如果數字是最後我會明確地包括這($意味着字符串的結尾)在您的匹配標準(^。*是可選的在你的情況下,但隱含它在那裏)。

如果該數字應該只有一個分鐘。和最大。長度我會把它也放在匹配標準{min,max}中(例如min = 1,max = 4將是{1,4})。如果該號碼應該有確切的4位數字,只需要做{4}。如果它應該是繼電器1或無限制,那麼+就沒問題。

\d and [0-9]的意思是相同的。

我不確定你是否真的需要[NC]標記,因爲如果「prid-」總是小寫,你可以刪除它,如果不保留的話。

添加[QSA]標誌,其他查詢字符串也可能包含在原始URL中,也會傳遞到重寫路徑,例如/real-long-uri-string-with-prid-1234?parameter=value。 在這種情況下,您獲得/views/propertyview.php?property_id=1234&parameter=value

因爲我們想要使用RewriteCond中的匹配標準,所以我們必須使用%而不是$符號。所以整個事情看起來像現在這樣:

RewriteCond %{REQUEST_URI} ^.*prid-(\d{1,4})$ [NC] 
RewriteRule ^.*$ /views/propertyview.php?property_id=%1 [QSA,L] 

因爲URI還可以在重寫規則本身進行選擇,我們可以做到在同一行(現在我們必須使用$):

RewriteRule ^.*prid-(\d{1,4})$ /views/propertyview.php?property_id=$1 [QSA,NC,L] 

編輯: 這個答案指的是這個問題的先前版本:https://stackoverflow.com/revisions/46481496/4我們的話題已經完全改變了。