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