Saturday, 15 February 2014

.htaccess - Ensure rewrite-rule is used -



.htaccess - Ensure rewrite-rule is used -

i have created simple rewrite url this:

rewriterule ^messages$ /messages.php [l]

how forcefulness user utilize /messages , not /messages.php? i.e., if user queries messages.php, he'll 301 redirected /messages.

i have long list of rewrite rules, 1 above.

rewriteengine on rewriterule ^messages$ /messages.php [l] rewriterule ^events$ /events.php [l] rewriterule ^cv$ /cv.php [l] rewriterule ^profile/([^/]*)$ /profile.php?id=$1 [l] rewriterule ^ratings$ /ratings.php [l] rewriterule ^newsfeed$ /newsfeed.php [l] rewriterule ^logout$ /logout.php [l] rewriterule ^profile$ /profile.php [l] rewriterule ^ranking$ /rank.php [l] rewriterule ^find-study$ /search.php [l] rewriterule ^search/$ /search.php [l] rewriterule ^search$ /search.php [l] rewriterule ^invite-friends$ /invite-friends.php [l] rewriterule ^profile/([^/]*)$ /profile.php?id=$1 [l] rewriterule ^profile/([^/]*)/([^/]*)$ /profile.php?id=$1&programme=$2 [l] rewriterule ^student-requests$ /student-requests.php [l] # q&a # view question rewriterule ^question(?:/([^/]+)(?:/([^/]*))?)?/?$ /question.php?id=$1&permalink=$2 [l] rewriterule ^question/([^/]*)/([^/]*)/([^/]*)$ /question.php?id=$1&permalink=$2&answer=$3 [l] # manage question rewriterule ^ask(?:/([^/]+)(?:/([^/]*))?)?/?$ /managequestion.php?tag_id=$1&tag_type=$2 [l] rewriterule ^ask/([^/]*)/([^/]*)/([^/]*)$ /managequestion.php?tag_id=$1&tag_type=$2&tag_name=$3 [l] rewriterule ^editquestion(?:/([^/]+)(?:/([^/]*))?)?/?$ /managequestion.php?id=$1&second=$2 [l] # questions rewriterule ^questions$ /questions.php [l] rewriterule ^questions/([^/]*)$ /questions.php?first=$1 [l] rewriterule ^questions/([^/]*)/([^/]*)$ /questions.php?first=$1&second=$2 [l] rewriterule ^questions/([^/]*)/([^/]*)/([^/]*)$ /questions.php?first=$1&second=$2&third=$3 [l] rewriterule ^questions/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /questions.php?first=$1&second=$2&third=$3&fourth=$4 [l]

when trying solve problem encountered problem of infinite loops. 1 way prevent utilize %{the_request}, since variable doesn't alter on rewrite. therefore, if utilize next rule, alter every url ending on .php url without it:

rewritecond %{the_request} ^(get|post)\ /(messages|events|cv|ratings|etc)\.php\ http rewriterule ^ %2 [r,l]

after testing rule works correctly, alter [r,l] [r=301,l] create redirect permanent. doing before works correctly makes testing pain.

edit: instead of using (.*) utilize /(page1|page2|page3) simple redirects. each of more complex ones need have single redirect each in form of:

rewritecond %{the_request} ^(get|post)\ /questions\.php\?id=([^&]+)&permalink=([^&]+)&answer=([^&]+)\ http rewriterule ^ questions/%2/%3/%4 [r,l]

.htaccess mod-rewrite rewrite

No comments:

Post a Comment