国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

在A(yíng)pache服務(wù)器使用mod_rewrite模塊重定向URL

2017-02-01 23:08:35 6957

在Web開(kāi)發(fā)中,通常設置HTTP能在URL不映射文件系統中的文件時(shí)訪(fǎng)問(wèn)資源。 雖然可以在某種程度上使用重定向語(yǔ)句來(lái)解決這個(gè)問(wèn)題,但是許多部署對于URL重寫(xiě)具有更復雜的需求。 Apache的mod_rewrite提供重寫(xiě)功能,以便用戶(hù)使用簡(jiǎn)潔明了的URL進(jìn)行交互,同時(shí)仍然能夠為管理員提供他們認為合適的網(wǎng)站目錄架構。

重寫(xiě)URL



塊或.htaccess文件中,使用以下行啟用mod_rewrite:

RewriteEngine on

您可以創(chuàng )建任意數量的重寫(xiě)規則。 這些規則提供了服務(wù)器比較入站請求的模式。 如果請求與重寫(xiě)模式匹配,則服務(wù)器按照規則所述修改請求,并處理該請求。 下面是一個(gè)重寫(xiě)規則的例子:

RewriteRule ^post-id/([0-9]+)$ /posts/$1.html

讓我們解析這條規則:首先,請注意,第一個(gè)字符串是匹配傳入請求的模式。 第二個(gè)字符串指定要提供的實(shí)際文件。 Mod_rewrite模式使用正則表達式語(yǔ)法:^匹配字符串的開(kāi)頭,$匹配字符串的結尾,這意味著(zhù)重寫(xiě)引擎不會(huì )重寫(xiě)與模式部分匹配的字符串。
上面的例子會(huì )重寫(xiě)指定以/post-id/開(kāi)頭的路徑的所有URL,并包含一個(gè)或多個(gè)數字(例如[0-9]+),在/posts/目錄中提供相應的.html文件。 模式中的括號術(shù)語(yǔ)指定了作為$1,$2,$3等傳遞給第二個(gè)字符串的變量。
您可以創(chuàng )建和應用多個(gè)重寫(xiě)規則,但這些規則是順序匹配的。 表示RewriteRules的順序可?影響匹配的規則。
或者,您可以插入RewriteBase指令來(lái)修改重寫(xiě)規則的行?。 讓我們假設:
這些指令是為/srv/www/example.com/public_html/目錄指定的。
某些用戶(hù)以http://www.tjdsmy.cn/post-id/200形式發(fā)送請求,其中200可能是長(cháng)于一位數的任何數字。
某些用戶(hù)以http://www.tjdsmy.cn/page/title-of-page的形式發(fā)送請求,其中“title of page”可能代表任何字符串。
這些文件位于/srv/www/example.com/public_html/objects/上,匹配請求文件名稱(chēng),擴展名為.html。

RewriteEngine on
RewriteBase /objects
RewriteRule ^post-id/([0-9]+)$ $1.html
RewriteRule ^page/([^/]+)$ $1.html

上面的重寫(xiě)規則集作用如下:
http://www.tjdsmy.cn/post-id/200/,提供位于/srv/www/example.com/public_html/objects/200.html的文件
http://www.tjdsmy.cn/page/free-the-toast/,提供位于/srv/example.com/public_html/objects/free-the-toast.html的文件

在特定條件下重寫(xiě)URL



使用RewriteCond參數,您可以限制使用RewriteRule的條件。 讓我們從WordPress應用程序的默認重寫(xiě)規則中獲取以下示例:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

在此示例中,以上下文的頂層開(kāi)始的所有請求都受重寫(xiě)規則的影響。 這由RewriteBase /指令指定。 上下文由在虛擬主機,目錄塊或.htaccess文件中指定偽指令的位置決定。
RewriteCond語(yǔ)句指示Apache僅當滿(mǎn)足條件時(shí)才應用遵循的規則。 在上述示例中,匹配請求的文件名稱(chēng)在文件系統上不存在(例如,!-f),或者目錄不存在(例如!-d)的請求。
簡(jiǎn)而言之,如果兩者都為真,并且文件和目錄都不存在,則Web服務(wù)器將請求附加到index.php。 也就是說(shuō),f用戶(hù)請求http://www.tjdsmy.cn/?post=123或http://www.tjdsmy.cn/post/123,服務(wù)器將返回index.php?post=123或index.php/post/123。

mod_rewrite設置響應碼



最后,有一些代碼,你可以附加到一個(gè)RewriteRule,修改重寫(xiě)的行為。 在前面的例子RewriteRule ./index.php [L],我們看到代表“最后規則”的[L]選項。 這阻止Apache應用任何其他重寫(xiě)規則。 最常見(jiàn)的附加選項包括:
F告訴客戶(hù)端該URL被禁止,用HTTP代碼403響應。
N強制mod_rewrite重新開(kāi)始重寫(xiě)過(guò)程,并允許多階段重寫(xiě)。
R告訴客戶(hù)端所請求的頁(yè)面已經(jīng)移動(dòng),具有用于臨時(shí)重定向的HTTP代碼302。 要表示該網(wǎng)頁(yè)已永久移動(dòng),請指定“R=301”。
您可以在RewriteRule結尾處指定多個(gè)選項,用逗號分隔它們,如:[L,R=301]


提交成功!非常感謝您的反饋,我們會(huì )繼續努力做到更好!

這條文檔是否有幫助解決問(wèn)題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問(wèn)題:
-->