2017-09-29 1 views
-1

Je souhaite rediriger en fonction de l'élément dans l'URL qui peut prendre plusieurs paramètres.Redirection et utilisation Explode au lieu de Get pour obtenir la valeur de la variable dans le modèle

mon URL cible est

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

mon URL source est

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

PRID-5102 et property_id = 5102 se réfèrent à la même chose et peut prendre différentes valeurs telles que 5103, 5104 ou 5105 et ainsi sur. Fondamentalement, je veux tout ignorer avant de prid et pointer vers l'URL cible et passer la valeur numérique après prid à l'URL cible.

La Suite semble fonctionner, mais je veux obtenir l'opinion si c'est la bonne façon de le faire

.htaccess

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

modèle php (en utilisant exploser au lieu d'obtenir)

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

Je ne crois pas que ce RewriteRule^(. *) Prid - ([0-9] +) $ views/propertyview.php? Property_id = $ 1 [NC, L] peut fonctionner. Ether vous devez utiliser $ 2 au lieu de $ 1 ou vous devez changer le critère correspondant à ^. * Prid - ([0-9] +) $ – Webdesigner

+0

S'il vous plaît ne pas changer votre sujet de question toutes les minutes d'affichage? D'abord vous voulez résoudre cela avec .htacces et mod-rewitre ... maintenant vous cherchez une solution PHP ... qu'est-ce que vous voulez vraiment? – Webdesigner

+0

@ Webdesigner son travail vous pouvez croire ce que vous voulez – Pichai

Répondre

1

Vous avoir à réécrire en fonction de votre URI demandé pas une chaîne de requête (c'est ce qui vient après le?).

Ensuite, je vous affinerais un peu les critères. prid-([0-9]+) signifierait que le mot "prid-" devrait être suivi par un ou un nombre illimité n'importe où dans votre URI. Cela ne devrait fonctionner que si le nombre est à la fin, je l'inclurais explicitement ($ signifie fin de chaîne) dans vos critères correspondants (^. * Est facultatif dans votre cas, mais implicitement il est là).

Si le nombre ne doit avoir qu'un min. et max. longueur je mettrais cela aussi dans les critères correspondants {min, max} (par exemple min = 1 et max = 4 serait {1,4}). Si le numéro doit avoir exactement 4 chiffres, faites le {4}. Si cela devrait être le relais 1 ou illimité que le + est bien.

\d et [0-9] signifie la même chose.

Je ne suis pas sûr si vous avez vraiment besoin du drapeau [NC], parce que si "prid-" est toujours en minuscule, vous pouvez le retirer, sinon le garder.

Ajoutez l'indicateur [QSA] Indique que l'autre chaîne de requête éventuellement incluse dans votre URL d'origine sera également transmise au chemin de réécriture, par exemple. /real-long-uri-string-with-prid-1234?parameter=value. Dans ce cas, vous obtenez /views/propertyview.php?property_id=1234&parameter=value

Parce que nous voulons utiliser les critères de correspondance de RewriteCond, nous devons utiliser le symbole% et pas le symbole $.Donc, tout cela ressemblerait à ceci maintenant:

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

Parce que l'URI peut également être sélectionné dans le RewriteRule lui-même, nous pouvons le faire en une seule ligne (maintenant, nous devons utiliser le $):

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

EDIT: cette réponse fait référence à une version antérieure de cette question: https://stackoverflow.com/revisions/46481496/4 maintenant au sujet a complètement changé.