2017-09-29 22 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我们的话题已经完全改变了。