Ê×Ò³ > ÍøÂçÓ¦Óà > Apache > ÕýÎÄ  
Apache ÖØÐ´¹æÔòµÄ³£¼ûÓ¦Óà (rewrite)
³ö×Ô£ºhttp://www.linuxforum.net ÎⰢͤ Jephe wu 2002Äê03ÔÂ19ÈÕ 17:21
Ò»:Ä¿µÄ

±¾ÎÄÖ¼ÔÚÌṩÈçºÎÓÃApacheÖØÐ´¹æÔòÀ´½â¾öһЩ³£¼ûµÄURLÖØÐ´·½·¨µÄÎÊÌ⣬ͨ¹ý³£¼ûµÄ
ʵÀý¸øÓû§Ò»Ð©Ê¹ÓÃÖØÐ´¹æÔòµÄ»ù±¾·½·¨ºÍÏßË÷¡£

¶þ:ΪʲôÐèÒªÓÃÖØÐ´¹æÔò£¿
Ò»¸öÍøÕ¾£¬Èç¹ûÊdz¤ÆÚÐèÒª·ÅÔÚinternetÉÏÌṩ·þÎñ£¬±Ø¶¨»áÓв»¶ÏµØ¸üкÍά»¤£¬ÈçÁÙ
Ê±×ªÒÆµ½ÆäËü·þÎñÆ÷½øÐÐά»¤£¬ÖØÐÂ×é֯Ŀ¼½á¹¹£¬±ä»»URLÉõÖÁ¸Ä±äµ½ÐµÄÓòÃûµÈµÈ£¬
¶øÎªÁËÈÿͻ§²»»áÒò´ËÊܵ½ÈκÎÓ°Ï죬×îºÃµÄ·½·¨¾ÍÊÇʹÓÃApache Rewrite Rule(ÖØÐ´
¹æÔò)¡£

Èý: ÖØÐ´¹æÔòµÄ×÷Ó÷¶Î§
1) ¿ÉÒÔʹÓÃÔÚApacheÖ÷ÅäÖÃÎļþhttpd.confÖÐ
2) ¿ÉÒÔʹÓÃÔÚhttpd.confÀﶨÒåµÄÐéÄâÖ÷»úÅäÖÃÖÐ
3) ¿ÉÒÔʹÓÃÔÚ»ù±¾Ä¿Â¼µÄ¿çÔ½ÅäÖÃÎļþ.htaccessÖÐ

ËÄ:ÖØÐ´¹æÔòµÄÓ¦ÓÃÌõ¼þ
Ö»Óе±Óû§µÄWEBÇëÇó×îÖÕ±»µ¼Ïòµ½Ä³Ì¨WEB·þÎñÆ÷µÄApacheºǫ́£¬ÔòÕą̂WEB·þÎñÆ÷½ÓÊÜ
½øÀ´µÄÇëÇ󣬸ù¾ÝÅäÖÃÎļþ¸ÃÇëÇóÊÇÖ÷ÅäÖû¹ÊÇÐéÄâÖ÷»ú£¬ÔÙ¸ù¾ÝÓû§ÔÚä¯ÀÀÆ÷ÖÐÇëÇóµÄ
URIÀ´Åä¶ÔÖØÐ´¹æÔò²¢ÇÒ¸ù¾Ýʵ¼ÊµÄÇëÇó·¾¶Åä¶Ô.htaccessÖеÄÖØÐ´¹æÔò¡£×îºó°ÑÇëÇó
µÄÄÚÈÝ´«»Ø¸øÓû§£¬¸ÃÏìÓ¦¿ÉÄÜÓÐÁ½ÖÖ£º

1) ¶Ôä¯ÀÀÆ÷ÇëÇóÄÚÈݵÄÍâ²¿ÖØ¶¨Ïò(Redirect)µ½ÁíÒ»¸öURL¡£
ÈÃä¯ÀÀÆ÷ÔÙ´ÎÒÔеÄURI·¢³öÇëÇó(R=301»òÕßR=302£¬ÁÙʱµÄ»òÊÇÓÀ¾ÃµÄÖØ¶¨Ïò)
È磺һ¸öÍøÕ¾ÓÐÕý¹æµÄURLºÍ±ðÃûURL£¬¶Ô±ðÃûURL½øÐÐÖØ¶¨Ïòµ½Õý¹æURL£¬»òÕßÍøÕ¾¸Ä»»
³ÉÁËеÄÓòÃû
Ôò°Ñ¾ÉµÄÓòÃûÖØ¶¨Ïòµ½ÐµÄÓòÃû(Redirect)

2) Ò²¿ÉÄÜÊÇÓÉApacheÄÚ²¿×ÓÇëÇó´úÀí²úÉúеÄÄÚÈÝËͻظø¿Í»§[P,L]
ÕâÊÇApacheÄÚ²¿¸ù¾ÝÖØÐ´ºóµÄURIÄÚ²¿Í¨¹ý´úÀíÄ£¿éÇëÇóÄÚÈݲ¢ËÍ»ØÄÚÈݸø¿Í»§£¬¶ø¿Í»§
¶Ëä¯ÀÀÆ÷²¢
²»ÖªµÀ£¬ä¯ÀÀÆ÷ÖеÄURI²»»á±»ÖØÐ´¡£µ«Êµ¼ÊÄÚÈݱ»Apache¸ù¾ÝÖØÐ´¹æÔòºóµÄURIµÃµ½¡£
È磺ÔÚ¹«Ë¾·À»ðǽÉÏÔËÐеÄApacheÆô¶¯ÕâÖÖ´úÀíÖØÐ´¹æÔò£¬´úÀí¶ÔÄÚ²¿Íø¶ÎÉϵÄWEB·þÎñ
Æ÷µÄÇëÇó¡£

Îå:ÖØÐ´¹æÔòÔõÑù¹¤×÷£¿
ÎÒÃǼٶ¨ÔÚ±àÒëApacheʱÒѾ­°Ñmod_rewrite±àÒë³ÉÄ£¿é£¬È·ÐÅÄãµÄhttpd.confÖÐÓÐ
LoadModule rewrite_module libexec/mod_rewrite.so
²¢ÇÒÔÚAddmoduleÖÐÓÐ
Addmodule mod_rewrite.c
Ôò¿ÉÒÔʹÓÃÖØÐ´¹æÔò¡£
µ±ÍⲿÇëÇóÀ´µ½Apache£¬Apacheµ÷ÓÃÖØÐ´¹æÔòÖе͍ÒåÀ´ÖØÐ´ÓÉÓû§ä¯ÀÀÆ÷Ö¸¶¨ÇëÇóµÄ
URI£¬×îºó±»ÖØÐ´µÄURIÈç¹ûÊÇÖØ¶¨Ïò£¬ÔòËÍÓÉä¯ÀÀÆ÷×÷ÔÙÒ»´ÎÇëÇó£»Èç¹ûÊÇ´úÀíÔò°ÑÖØÐ´
ºóµÄURI½»¸ø´úÀíÄ£¿éÇëÇó×îÖÕµÄÄÚÈÝ(Content),×îºó°ÑÄÚÈÝËͻظøä¯ÀÀÆ÷¡£

Áù: ºÎʱʹÓÃ.htaccessÖеÄÖØÐ´¹æÔò¶¨Ò壿
¼ÙÈçÄã¶ÔÄãµÄµÄÍøÕ¾ÄÚÈÝËùÔڵķþÎñÆ÷ûÓйÜÀíԱȨÏÞ£¬»òÕßÄãµÄÍøÕ¾·ÅÔÚISPµÄ·þÎñÆ÷
ÉÏÍйܵȵÈÌõ¼þÏ£¬ÄãÎÞ·¨¸ÄдÖ÷ÅäÖÃÎļþ£¬È»¶øÄã¿ÉÒÔ¶ÔÄãµÄWEBÕ¾µãÄÚÈÝËùÔÚµÄĿ¼
ÓÐдȨÏÞ£¬ÔòÄã¿ÉÒÔÉèÖÃ×Ô¼ºµÄ.htaccess
Îļþ´ïµ½Í¬ÑùµÄÄ¿µÄ¡£µ«ÄãÐèҪȷ¶¨Ö÷ÅäÖÃÎļþÖжÔÄãµÄÍøÕ¾ËùÔÚµÄĿ¼¶¨ÒåÁËÏÂÃæµÄÄÚ
ÈÝ:

Options Indexes FollowSymLinks
AllowOverride all

·ñÔòÄãµÄ.htaccess²»»á¹¤×÷¡£

Æß: Ó¦ÓþÙÀý
¼Ù¶¨Apache±»±àÒë°²×°ÔÚÖ÷»ú192.168.1.56µÄ/usr/local/apache/ Ŀ¼ÏÂÃæ£¬ÎÒÃDZà
Òë½øÁËÖØÐ´ºÍ´úÀíÄ£¿é¡£

1) Òþ²ØApacheϵÄij¸öĿ¼£¬Ê¹µÃ¶Ô¸ÃĿ¼µÄÈκÎÇëÇó¶¼Öض¨Ïòµ½ÁíÒ»¸öÎļþ¡£

a> httpd.confµÄʵÏÖ·½·¨

ÎÒÃÇ·ÅÏÂÃæµÄ²¿·Öµ½/usr/local/apache/conf/httpd.conf


options Indexes followsymlinks
allowoverride all
rewriteengine on
rewritebase /
rewriterule ^(.*).html.en [R=301]


×¢£ºrewriteengine on ÎªÖØÐ´ÒýÇæ¿ª¹Ø£¬Èç¹ûÉèΪoff,ÔòÈκÎÖØÐ´¹æÔò¶¨Ò彫²»±»Ó¦
Ó㬸ÿª¹ØµÄÁíÒ»ºÃ´¦¾ÍÊÇÈç¹ûΪÁËÁÙʱÄõôÖØÐ´¹æÔò£¬Ôò¸ÄΪoffÔÙÖØÆô¶¯Apache¼´
¿É£¬²»±Ø½«ÏÂÃæÒ»ÌõÌõµÄÖØÐ´¹æÔò×¢Ê͵ô¡£
rewritebase / µÄ×÷ÓÃÊÇÈç¹ûÔÚÏÂÃæµÄrewriterule¶¨ÒåÖб»ÖØÐ´ºóµÄ²¿·Ö(´Ë´¦ÎªÎļþ
Ãûindex.html.en)Ç°ÃæÃ»ÓÐ/£¬ÔòÊÇÏà¶ÔĿ¼£¬Ïà¶ÔÓÚÕâ¸örewritebaseºóÃæµÄ¶¨ÒåÒ²¾Í
ÊÇ/usr/local/apache/htdocs/index.html.en,·ñÔò£¬Èç¹û´Ë´¦Ã»ÓÐrewritebase /Õâ
Ò»ÏÔò±»ÖØÐ´³É
http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en £¬ÏÔÈ»ÊÇ
²»ÕýÈ·µÄ¡£

²»¹ýÕâÀïÎÒÃÇÒ²¿ÉÒÔ²»ÓÃrewritebase / , ¶ø¸ÄΪ
rewriteengine on
rewriterule ^(.*) index.html.en [R=301]
»òÕß
rewriteengine on
rewriterule ^(.*)://192.168.1.56/index.html.en [R=301]

b> .htaccessµÄʵÏÖ·½·¨

ÎÒÃÇÏÈ·ÅÏÂÃæµÄ²¿·Öµ½httpd.conf


options Indexes followsymlinks
allowoverride all


È»ºó·ÅÏÂÃæµÄ²¿·Öµ½/usr/local/apache/htdocs/manual/.htaccessÖÐ
rewriteengine on
rewritebase /
rewriterule ^(.*).html.en [R=301]

×¢£º¶ÔÎļþ.htaccessËù×÷µÄÈκθ͝²»ÐèÒªÖØÆô¶¯Apache.

ÎÊ£ºÒªÊǰÑÕâ¸ömanualÄ¿Â¼ÖØ¶¨Ïòµ½Óû§jepheµÄ×Ô¼ºµÄÖ÷Ä¿Â¼ÄØ£¿
ÓÃÏÂÃæµÄ.htaccess·½°¸¡£
rewriteengine on
rewritebase /~jephe/
rewriterule ^(.*) [R=301]

Ôò¶ÔmanualĿ¼ÏÂÈκÎÎļþµÄÇëÇó±»Öض¨Ïòµ½~jepheĿ¼ÏÂÏàͬÎļþµÄÇëÇó¡£

2) ת»»www.username.domain.comµÄ¶ÔÓÚusernameµÄÖ÷Ò³ÇëÇóΪ
www.domain.com/username

¶ÔÓÚHTTP/1.1µÄÇëÇó°üÀ¨Ò»¸öHost: HTTPÍ·£¬ÎÒÃÇÄÜÓÃÏÂÃæµÄ¹æÔò¼¯ÖØÐ´
http://www.username.domain.com/anypath µ½ /home/username/anypath

Rewriteengine on
rewritecond %{HTTP_HOST} ^www.[^.]+.host.com501br> rewriterule ^( [C]
rewriterule ^www.([^.]+).host.com(.*) /home/

×¢£º
rewritecond Ìõ¼þÖØÐ´¹æÔò£¬µ±Âú×ãºóÃæ¶¨ÒåµÄÌõ¼þºó²Å»áÓ¦ÓÃÏÂÃæµÄÖØÐ´¹æÔò£¬
rewritecondÓи÷ÖÖ±äÁ¿
£¬Çë²éÔÄÏà¹ØÎĵµ¡£

3) ·À»ðǽÉϵÄÖØÐ´¹æÔò´úÀíÄÚ²¿Íø¶ÎÉÏ·þÎñÆ÷µÄÇëÇó¡£

NameVirtualhost 1.2.3.4


servername www.domain.com
rewriteengine on
proxyrequest on
rewriterule ^/(.*)://192.168.1.3/ [P,L]


×¢£ºµ±Íⲿä¯ÀÀÆ÷ÇëÇówww.domain.comʱ±»½âÎöµ½IPµØÖ·1.2.3.4 ,Apache ½»³ö
mod_rewrite´¦Àíת»»³É
http://192.168.1.3/ºóÔÙ½»ÓÉ´úÀíÄ£¿émod_proxyµÃµ½ÄÚÈݺó´«ËÍ»ØÓû§µÄä¯ÀÀÆ÷¡£


4) »ù±¾Ô¤ÏÈÉ趨µÄת»»MAP±í½øÐÐÖØÐ´ rewritemap

ת»»www/anypath µ½Map±íÖй涨µÄURI,ÉÏÃæÊÇÐéÄâÖ÷»ú
Öе͍Òå

rewritelog /usr/local/apache/logs/rewrite.log
rewriteloglevel 9

rewriteengine on
proxyrequest on
rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
rewriterule ^/([^/]+)+/(:: [C]
rewriterule ( [R=301,L]

Îļþ/usr/local/apache/conf/rewrite.mapµÄÄÚÈÝÈçÏÂ:

sg http://a.b.c.d/
sh http://e.f.g.h/

×¢£º µ±Óû§ÇëÇóhttp://www.domain.com/sg/anypathʱ±»ÖØÐ´Îª
http://a.b.c.d/anypath .
µ±ÐèÒªµ÷ÊÔʱÇëÓÃrewritelog and rewriteloglevel 9ÁªºÏ,9Ϊ×î´ó¼´µÃµ½×î¶àµÄµ÷ÊÔ
ÐÅÏ¢
×îСΪ1£¬×îСµÄµ÷ÊÔÐÅÏ¢£¬Ä¬ÈÏΪ0£¬Ã»Óе÷ÊÔÐÅÏ¢¡£
sitemapµÄÓï·¨ÊÇ| ,ÓÐЩÊéÉϰѴ³ÉÁË%ÊÇ´í
ÎóµÄ¡£
¡¾¡¿¡¾http://www.trainlinux.com¡¿¡¾Close¡¿
¡ºÏà¹Ø×ÊÁÏ¡»
¡ñ ApacheÖØ¸ººÉ·þÎñÆ÷Ó¦ÈçºÎÓÅ»¯ (2002-03-19 17:20)
¡ñ ApacheµÄhttpd.confÎļþ³£ÓÃÖ¸Áî½âÊÍ (2002-03-19 17:20)
Home 

³Ï¶÷LinuxÅàѵ¹¤×÷ÊÒ