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

在Apache服務(wù)器使用mod_rewrite模塊重定向URL

2017-03-23 01:18:11 4686

在Apache服務(wù)器使用mod_rewrite模塊重定向URL

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

重寫URL



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

RewriteEngine on

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

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

讓我們解析這條規(guī)則:首先,請注意,第一個字符串是匹配傳入請求的模式。 第二個字符串指定要提供的實際文件。 Mod_rewrite模式使用正則表達式語法:^匹配字符串的開頭,$匹配字符串的結(jié)尾,這意味著重寫引擎不會重寫與模式部分匹配的字符串。

上面的例子會重寫指定以/post-id/開頭的路徑的所有URL,并包含一個或多個數(shù)字(例如[0-9]+),在/posts/目錄中提供相應(yīng)的.html文件。 模式中的括號術(shù)語指定了作為$1,$2,$3等傳遞給第二個字符串的變量。

您可以創(chuàng)建和應(yīng)用多個重寫規(guī)則,但這些規(guī)則是順序匹配的。 表示RewriteRules的順序可以影響匹配的規(guī)則。

或者,您可以插入RewriteBase指令來修改重寫規(guī)則的行為。 讓我們假設(shè):

這些指令是為/srv/www/example.com/public_html/目錄指定的。

某些用戶以http://www.tjdsmy.cn/post-id/200形式發(fā)送請求,其中200可能是長于一位數(shù)的任何數(shù)字。

某些用戶以http://www.tjdsmy.cn/page/title-of-page的形式發(fā)送請求,其中“title of page”可能代表任何字符串。

這些文件位于/srv/www/example.com/public_html/objects/上,匹配請求文件名稱,擴展名為.html。

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

上面的重寫規(guī)則集作用如下:
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的文件

在特定條件下重寫URL



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

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

在此示例中,以上下文的頂層開始的所有請求都受重寫規(guī)則的影響。 這由RewriteBase /指令指定。 上下文由在虛擬主機,目錄塊或.htaccess文件中指定偽指令的位置決定。

RewriteCond語句指示Apache僅當(dāng)滿足條件時才應(yīng)用遵循的規(guī)則。 在上述示例中,匹配請求的文件名稱在文件系統(tǒng)上不存在(例如,!-f),或者目錄不存在(例如!-d)的請求。

簡而言之,如果兩者都為真,并且文件和目錄都不存在,則Web服務(wù)器將請求附加到index.php。 也就是說,f用戶請求http://www.tjdsmy.cn/?post=123或http://www.tjdsmy.cn/post/123,服務(wù)器將返回index.php?post=123或index.php/post/123。


mod_rewrite設(shè)置響應(yīng)碼



最后,有一些代碼,你可以附加到一個RewriteRule,修改重寫的行為。 在前面的例子RewriteRule ./index.php [L],我們看到代表“最后規(guī)則”的[L]選項。 這阻止Apache應(yīng)用任何其他重寫規(guī)則。 最常見的附加選項包括:

F告訴客戶端該URL被禁止,用HTTP代碼403響應(yīng)。

N強制mod_rewrite重新開始重寫過程,并允許多階段重寫。

R告訴客戶端所請求的頁面已?移動,具有用于臨時重定向的HTTP代碼302。 要表示該網(wǎng)頁已永久移動,請指定“R=301”。

您可以在RewriteRule結(jié)尾處指定多個選項,用逗號分隔它們,如:[L,R=301]











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

這條文檔是否有幫助解決問題?

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

在文檔使用中是否遇到以下問題: