重定向和使用爆炸而不是获取将变量值转换为模型

时间:2017-09-29 03:43:47

标签: php .htaccess mod-rewrite

我想根据url中的item重定向,这可能需要多个参数。

我的目标网址是

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

我的源网址是

 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模型(使用explode而不是get)

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

1 个答案:

答案 0 :(得分:1)

你必须根据你请求的URI而不是查询字符串重写(这是在...后面的内容。)。

然后我会稍微改进你的匹配标准。 prid-([0-9]+)表示“prid-”一词后面应该跟URI中的一个或无限数字任何地方。这应该仅在数字结束时才有效我将在你的匹配条件中明确地包含这个($表示字符串的结尾)(^。*在你的情况下是可选的,但隐含地在那里)。

如果号码只有一分钟。最多长度我也会把它放在匹配标准{min,max}中(例如min = 1和max = 4将是{1,4})。如果数字应该有4位数,那么只需{4}。如果它应该是继电器1或无限制+正常。

\d[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]

因为也可以在RewriteRule本身中选择U​​RI,我们可以在一行中完成(现在我们必须使用$):

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

修改 这个答案指的是这个问题的先前版本:https://stackoverflow.com/revisions/46481496/4现在主题已经完全改变了。