国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Apache > 正文

Apache mod_rewrite中的REQUEST_URI使用實(shí)例

2024-08-27 18:26:30
字體:
供稿:網(wǎng)友

如下規(guī)則:

復(fù)制代碼 代碼如下:

RewriteEngine on
# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_/-]+)/.xml$ /sitemap/$1
# redirected all invalid request the the index bootstrap
RewriteRule !/.(htm|txt|xml|css|js|swf|gif|jpg|png|ico)$ index.php [L]

假設(shè)訪問 sitemap_index.xml ,當(dāng)經(jīng)過兩次RewriteRule之后,傳給bootstrap程序 index.php 的 $_SERVER['REQUEST_URI'] 值仍然是 /sitemap_index.xml ,但實(shí)際上希望是 /sitemap/index ,這樣 index.php 才能正確的進(jìn)行 url route 。

要達(dá)到這個(gè)目的,有兩個(gè)方法。

第一種方式,配合 mod_proxy ,將第一條重寫規(guī)則改為

復(fù)制代碼 代碼如下:

# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_/-]+)/.xml$ /sitemap/$1 [P,L]

這樣將在內(nèi)部產(chǎn)生一個(gè)新的URL請求, REQUEST_URI 的值也就變成了新的 /sitemap/index 。但這種方法制造了額外的一次 http 請求。

第二種方法,將第一條規(guī)則改為

復(fù)制代碼 代碼如下:

# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_/-]+)/.xml$ /sitemap/$1 [E=REQUEST_URI:/sitemap/$1]

或者
復(fù)制代碼 代碼如下:

# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_/-]+)/.xml$ index.php [E=REQUEST_URI:/sitemap/$1,L]

然后通過 $_SERVER['REDIRECT_REQUEST_URI'] 變量得到 值 /sitemap/index (注意使用 E 設(shè)置環(huán)境變量的時(shí)候,mod_rewrite 自動給變量加上 REDIRECT_ 前綴)。

有趣的是在 Rewrite 的過程中 REQUEST_URI 的值始終保持是原始的請求URI,但在 mod_setenvif 中提供的 SetEnvIf / SetEnvIfNoCase 中所使用的 Request_URI 屬性得到的卻是經(jīng)過 rewrite 之后的地址而非原始 GET/POST 中的 URI。

所以如果在 httpd.conf / httpd-vhosts.conf 中想使用

復(fù)制代碼 代碼如下:

SetEnvIfNoCase Request_URI "sitemap" ...

來針對 sitemap 設(shè)置環(huán)境變量的話是不起作用的,因?yàn)檫@時(shí)候傳給 SetEnvIfNoCase 進(jìn)行判斷的 Request_URI 是 index.php 而不是 sitemap_index.xml 或 sitemap/index 。想要得到原始的 Request_URI 信息就必須在 rewrite 規(guī)則的最開始進(jìn)行保存,比如在 rewrite 規(guī)則開頭加入
復(fù)制代碼 代碼如下:

SetEnvIfNoCase Request_URI "(^/sitemap_.*/.xml)" MY_REQUEST_URI_BF_REWRITE=$1

然后在需要的地方使用
復(fù)制代碼 代碼如下:

SetEnvIfNoCase MY_REQUEST_URI_BF_REWRITE "sitemap" ...

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 利川市| 东台市| 石泉县| 阳城县| 克拉玛依市| 开江县| 乐清市| 广水市| 长白| 乌兰浩特市| 屏东县| 万全县| 邹平县| 汤阴县| 敦化市| 肇源县| 葵青区| 罗源县| 大港区| 清涧县| 博爱县| 吉隆县| 蚌埠市| 田东县| 西青区| 三河市| 齐齐哈尔市| 衡东县| 绿春县| 石景山区| 仙桃市| 淮南市| 海晏县| 拉萨市| 资中县| 兴安县| 青川县| 岳池县| 双桥区| 临朐县| 扶沟县|