1. 程式人生 > >apache rewrite支援post資料

apache rewrite支援post資料

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    # 包含api及media
    RewriteCond %{REQUEST_FILENAME} "(api\.php|media\.php|Public)"
    RewriteRule ^(.*)$ http://www.17byh.com/$1 [R=301,L,P]
#    RewriteRule ^(.*)$ http://l.sys.17byh.com/index.php [R=301,P,L]


#    RewriteRule ^(.*)$ http://www.17byh.com/$1 [R=301,P,L]
#    RewriteRule ^(.*)$ http://l.sys.17byh.com/index.php/$1 [R=301,P,L]


#    RewriteCond %{REQUEST_FILENAME} !-d
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>

說明:eg: 請求http://l.17b/api.php/Home/game
RewriteCond %{REQUEST_FILENAME} "(api\.php|media\.php|Public)" #請求的檔名含有api.php或media.php或Public
RewriteRule ^(.*)$ http://www.17byh.com/$1 [R=301,L,P]

^(.*)$ : 將匹配api.php/Home/game   最終跳轉到http://www.17byh.com/api.php/Home/game
$1 : 匹配(.*)的結果  實際上為:api.php/Home/game
R=301 :  永久性跳轉
L :最後一次匹配規則
P : 強制使用代理轉發 去掉P,可以跳轉到具體地址,有P,看不到具體跳轉到哪裡


1. 啟用Apache的mod_rewrite擴充套件
         預設情況下,Apache的擴充套件模組中是包含mod_rewrite.so的,相應地,其conf/httpd.conf中也會有下面這行內容:
#LoadModule rewrite_module modules/mod_rewrite.so
         mod_rewrite擴充套件預設未啟用,我們只需將#註釋符去掉,啟用該擴充套件模組即可。
2. 開啟RewriteEngine並配置RewriteRule
         在httpd.conf檔案最後部分新增下面2行內容:
           RewriteEngine ON


           RewriteRule ^/myuri.*$ /myproxy.php
         這樣就將url的方法名為myuri的http請求rewrite至myproxy.php指令碼,由後者實現http proxy功能。
 需要注意的幾點:
         1)由於我的業務需求是在伺服器級做rewrite,故只需修改httpd.conf相關配置項,無需修改<Directory /> section中的AllowOverride配置,如果要用.htaccess檔案實現目錄級的區域性rewrtie,則為保證rewrite功能正常使用,需要設定AllowOverride選項。
         關於AllowOverwrite的說明,可參考官網文件。關於何時需要利用.htaccess實現rewrite,這篇文章有解釋,此處不再贅述。
         2)配置RewrtieRule時,這篇文章提到想要實現POST資料的rewrite,必須設定P Flag,表示force proxy。但我的測試結果表明,不設定P時http post的rewrite可以正常work,相反,如果設定了P flag(在RewriteRule行尾明確指定RewriteRule flag為[P]),則需要下面的第三步設定才能正常實現post的rewrite。囧。。。
         3)關於RewriteRule眾多flags的含義,可參考這裡
        經過上面2步,重啟Apache後,rewrite功能就可以使用了,測試表明HTTP GET/POST請求的rewrite正常,符合預期。
        不過若在RewriteRule中指定[P],則post方式的rewrite還需要啟用Apache的proxy擴充套件,如本文第3步所述。
3. 啟用Apache的proxy擴充套件是否需要該步設定視RewriteRule是否指定P flag而定
         在httpd.conf中啟用下面2個擴充套件模組以實現http post的proxy功能(預設未啟用,去掉#註釋啟用即可):
 LoadModule proxy_module modules/mod_proxy.so
             LoadModule proxy_http_module modules/mod_proxy_http.so

更多:http://www.phppan.com/2009/08/apache-url-rewrite-post-data/

          https://www.cnblogs.com/wajika/p/6605965.html

          https://blog.csdn.net/slvher/article/details/9136331