Apache地址重写的几个问题
? ? ? Apache地址重寫的配置分為兩種方式,即通過(guò)httpd.conf配置和.htaccess文件。
????? 首先要打開rewrite模塊,windows下的配置是
LoadModule rewrite_module modules/mod_rewrite.so
?
????? httpd.conf的配置可以全局生效,也可以只配置一個(gè)目錄,需要做的事情是在相應(yīng)目錄的Directory標(biāo)簽下配置Rewrite規(guī)則。
????? .htaccess的則放到相應(yīng)目錄下(或者根目錄)即可,這是VPS里常用的一種方式,畢竟作為一個(gè)VPS購(gòu)買者不可能要求提供商去更改全局配置文件。這種方式需要注意的有如下兩點(diǎn):
????? 首先,.htaccess要想起作用,必須要在httpd.conf中相應(yīng)的Directory標(biāo)簽下配置AllowOverride All(默認(rèn)是None),其次是windows下這種無(wú)文件名僅有擴(kuò)展名的文件是無(wú)法直接生成的,可以在cmd窗口下使用copy con命令來(lái)生成(這命令也有年頭了,我小學(xué)的時(shí)候還學(xué)過(guò),光陰荏苒啊,扯遠(yuǎn)了…),Ctrl+Z<Enter>保存。
???? 然后我們說(shuō)一下幾個(gè)概念。
???? 首先是RewriteEngine,這是地址重寫的引擎,可以方便的設(shè)置為On或者Off來(lái)啟用和關(guān)閉引擎。
???? 其次是RewriteCond,地址重寫的條件,符合這個(gè)條件的才進(jìn)行表達(dá)式判斷和重寫,這樣能有效減少匹配的條數(shù),提高重寫效率。
???? 最后是RewriteBase和RewriteRule,RewriteBase指明重定向地址的基礎(chǔ),即RewriteRule后一部分重定向地址會(huì)拼合上RewriteBase,合成一個(gè)完整的重定向地址。這在一個(gè)web容器下有多個(gè)網(wǎng)站的時(shí)候比較有用。
???? RewriteRule才是我們討論的主要話題。RewriteRule實(shí)現(xiàn)把符合表達(dá)式的地址重定向到另一個(gè)地址的功能,RewriteRule的語(yǔ)法類似于下面
RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2
????? RewriteRule緊跟著判斷表達(dá)式,之后是需要重定向的位置,正則表達(dá)式()會(huì)捕獲一個(gè)分組,然后通過(guò)$n引用這個(gè)分組,從而實(shí)現(xiàn)地址重寫。RewriteRule匹配的開始位置是整個(gè)URL去掉當(dāng)前目錄后剩下的部分,比如我在/discuz配置上面所示的RewriteRule,然后輸入一個(gè)URL-http://localhost/discuz/forum-1-1.html,被用來(lái)匹配的輸入會(huì)是forum-1-1.html,也就是前面的/discuz/被吃掉了。對(duì)于整個(gè)問(wèn)題,我們可以用如下的語(yǔ)句驗(yàn)證。
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ rewrite.php?param=$1
注:在rewrite.php里打印一下GET['param’]參數(shù)
???? 另外這里需要說(shuō)明的是,如果我定義了
RewriteBase /discuz
???? 那么前面的^forum-([0-9]+)-([0-9]+)\.html$不受影響,但是后面會(huì)變成/discuz/forumdisplay.php?fid=$1&page=$2。不過(guò)RewriteBase并不是必須的,若有指定RewriteBase,結(jié)果為RewriteBase+重定向地址,否則為當(dāng)前目錄+重定向地址。這里當(dāng)前目錄指的是.htaccess所在目錄(使用.htaccess的時(shí)候)或者Directory標(biāo)簽指定的目錄(使用httpd.conf的時(shí)候)。
???? 以上操作在windows下測(cè)試通過(guò)。
參考文獻(xiàn):
[1]Apache中RewriteCond規(guī)則參數(shù)介紹,
http://hi.baidu.com/%D2%BB%CE%C4%CC%EC/blog/item/ace7f14e19851cc4d0c86af2.html
[2]RewriteRule-htaccess詳細(xì)語(yǔ)法使用教程,
http://www.3code.cn/rewriterule-htaccess%E8%AF%A6%E7%BB%86%E8%AF%AD%E6%B3%95%E4%BD%BF%E7
轉(zhuǎn)載于:https://www.cnblogs.com/sdqxcxh/archive/2012/04/02/2430239.html
總結(jié)
以上是生活随笔為你收集整理的Apache地址重写的几个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开源MongoDB管理工具MongoCo
- 下一篇: ARM裸机开发环境搭建