homepage Welcome to WebmasterWorld Guest from 23.20.91.134
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member
Home / Forums Index / Code, Content, and Presentation / Apache Web Server
Forum Library, Charter, Moderators: Ocean10000 & incrediBILL & phranque

Apache Web Server Forum

    
htaccess redirect problem
DreameR01




msg:4134890
 8:00 pm on May 18, 2010 (gmt 0)

I have changed my dynamic url to static url which is working fine when the static url is used but I want to all those earlier dynamic url redirect automatically where I'm getting problem

dynamic url: ?a=read&page=test
static url: /articles/test.html


code I used for internal rewrite-

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^articles/([^/]*)\.html$ /index.php?a=read&page=$1 [L]
RewriteRule ^articles/$ /index.php?a=read&page=articles [L]
RewriteRule ^articles\.html$ /index.php?a=read&page=articles [L]
RewriteRule ^([^/]*)\.html$ /?a=$1 [L]

its working without any problem but can't make the old dynamic url redirect automatically to the new static url, tried separately by redirect, redirectmatch and rewrite rule but cant make it working :( -

Redirect 301 ?a=read&page=test /articles/$1.html
Redirect 301 http://www.example.com/?a=read&page=test http://www.example.com/articles/$1.html

RedirectMatch 301 ^a=read&page=(.+)$ /articles/$1.html

RewriteCond %{QUERY_STRING} ^a=read&page=(.*)$
RewriteRule ^articles/([^/]*)\.html$ /index.php?a=read&page=$1 [R=301,L]

here are the other codes of my htaccess file just in case anything needs to change -

IndexIgnore .htaccess */.?* *~ *# */HEADER* */README* */_vti*

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName www.example.com
AuthUserFile /home/example/public_html/_vti_pvt/service.pwd
AuthGroupFile /home/example/public_html/_vti_pvt/service.grp

Options All -Indexes


Please help.... Thanks in advance

 

jdMorgan




msg:4134946
 9:53 pm on May 18, 2010 (gmt 0)


Options +FollowSymLinks
RewriteEngine On
#
# Externally redirect requests for dynamic URLs (now used only as filepaths) back to new static URLs
#
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(index\.php)?\?a=read&page=([^&\ ]+)\ HTTP/
RewriteRule ^(index\.php)?$ http://www.example.com/articles/%2\.html? [R=301,L]
#
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(index\.php)?\?a=([^&\ ]+)\ HTTP/
RewriteRule ^(index\.php)?$ http://www.example.com/%2\.html? [R=301,L]
#
#
# Internally rewrite requests for new static URLs to script filepath+query
#
RewriteRule ^articles(/|\.html)$ /index.php?a=read&page=articles [L]
#
RewriteRule ^articles/([^/.]+)\.html$ /index.php?a=read&page=$1 [L]
#
RewriteRule ^([^/.]+)\.html$ /index.php?a=$1 [L]

This demonstrates the use of the server variable THE_REQUEST to check to be sure that the dynamic script path is being directly requested by a client, and not as the result of one of previously executing one of your internal rewrites. THE_REQUEST is the original client request line exactly as sent to your server, and is what is logged in your raw server access logs, e.g.
GET /index.php?a=read&article=blue-widget-features HTTP/1.1


Note that this rewrite/redirect process is not symmetric or strictly reversible because your URLs were inconsistent; It is impossible to determine whether to redirect requests for "index.php?a=read&page=articles" to /articles/articles.html or to /articles/

I have chosen the former in the example code above, mainly because it eliminates a rewriterule and therefore improves efficiency.

I have also combined two of your internal-rewrite rules into one, and changed what was formerly your last rule to rewrite directly to index.php instead of to "/" to avoid the necessity to invoke mod_dir to do this -- again for efficiency.

The rules are now in the correct order to prevent unwanted exposure of filepaths as URLs, and to prevent unexpected operation by putting the rules within the two redirect- and rewrite- groups in order from most-specific to least- specific patterns and conditions.

Following on to this idea, should your wish to add redirects to canonicalize requests for "index.php" and/or for non-canonical domains, those two new rules would follow the first two redirects, in the order stated here.

Jim

[edit] Corrected as noted below. [/edit]

[edited by: jdMorgan at 12:27 am (utc) on May 19, 2010]

DreameR01




msg:4134991
 11:12 pm on May 18, 2010 (gmt 0)

Hi Thanks for helping but I'm still getting problem as when entering
http://www.example.com/?a=read&page=test

its redirecting to-
http://www.example.com/articles/.html

missing the last variable!

tried also by -
http://www.example.com/index.php?a=read&page=test

which redirected to -
http://www.example.com/articles/index.php.html

jdMorgan




msg:4135021
 12:28 am on May 19, 2010 (gmt 0)

Sorry, the "%1" in both of the first two rules should be "%2".

I corrected the code above to reflect this.

Jim

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / Apache Web Server
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved