/ / सभी के लिए फिर से लिखना करें। निरंतर querystring के साथ .php पृष्ठों - php, .htaccess, mod-rewrite, url-rewriting, rewrite

निरंतर क्वेरीस्ट्रिंग के साथ सभी .php पृष्ठों के लिए rerriteRule - php, .htaccess, mod-rewrite, url-rewriting, rewrite

मैं एक ऐसी परियोजना पर काम कर रहा हूं, जिसके लिए सभी पृष्ठों में एक querystring ग्रहण करने की आवश्यकता है। उदाहरण के लिए निम्नलिखित पृष्ठ:

  1. example.com/alfa.php?id=1
  2. example.com/beta.php?id=30
  3. exapmle.com/gamma.php?id=50

मैं अपने URL को सुंदर बनाने के लिए निम्नलिखित .htaccess का उपयोग कर रहा हूँ।

RewriteEngine On
## BEAUTIFUL URL
DirectoryIndex default.php
Options -Multiviews -Indexes +FollowSymLinks
#RewriteBase /
DirectorySlash off
# remove trailing slash
RewriteRule ^(.*)/(?.*)?$ $1$2 [R=301,L]
# rewrite /dir/file?query to /dir/file.php?query
RewriteRule ^([w/-]+)(?.*)?$ $1.php$2 [L,T=application/x-httpd-php]

यह कोड निम्नलिखित रूपांतरण करेगा:

example.com/alfa.php?id=1 to example.com/alfa?id=1

यह मानते हुए कि X.php हर समय बदल रहा है (X) लेकिन id हमेशा स्थिर रहती है, .htaccess फ़ाइल की सबसे अच्छी सामग्री क्या है?

मैंने कई तरीकों की कोशिश की, लेकिन सबसे अच्छा क्या है?

और एक बात और, मैं URL को कैसे परिवर्तित कर सकता हूं example.com/alfa/1 तथा example.com/beta/30

उत्तर:

जवाब के लिए 0 № 1

आप क्वेरी स्ट्रिंग (सभी सामग्री के बाद) के विरुद्ध मिलान करने का प्रयास कर रहे हैं ?) अपने नियम के रेगेक्स पैटर्न में। क्वेरी स्ट्रिंग isn "उस मैच का केवल एक हिस्सा है, केवल URI। लेकिन चूंकि आप डॉन" नहीं चाहते हैं कि क्वेरी स्ट्रिंग को छुआ जाए, बस इसके खिलाफ "t मिलान न करें" क्योंकि यह स्वचालित रूप से संलग्न हो जाएगा:

RewriteEngine On
## BEAUTIFUL URL
DirectoryIndex default.php
Options -Multiviews -Indexes +FollowSymLinks
#RewriteBase /
DirectorySlash off
# remove trailing slash
RewriteRule ^(.*)/$ $1 [R=301,L]
# rewrite /dir/file?query to /dir/file.php?query
RewriteRule ^([w/-]+)$ $1.php [L,T=application/x-httpd-php]

के लिये example.com/alfa/1 तथा example.com/beta/30:

RewriteCond %{THE_REQUEST} [A-Z]{3,9} /([w/-]+)(.php)??id=([0-9]+)
RewriteRule ^ /%1/%3 [L,R=301]

RewriteRule ^([w/-]+?)/([0-9]+)$ $1.php?id=$2 [L,QSA,T=application/x-httpd-php]

कुछ और आप कोशिश कर सकते हैं अपने नियमों से छुटकारा पा रहे हैं और बस उपयोग कर रहे हैं Multiviews, जिसे आपने बंद कर दिया है। इस तरह के सामान के लिए मल्टीव्यू और mod_negotiation किया गया था।