2016-11-23 98 views
0

我有一個簡單的Flask應用程序,我改變了Apache配置文件啓用.htaccess,我認爲該文件被Apache看到,因爲當我寫「拒絕所有「在.htaccess中我得到一個」禁止「頁面。這讓我覺得我必須在語法的某個地方出現錯誤。我花了很多時間嘗試不同的正則表達式,但無濟於事。國防部重寫規則將無法正常工作 - 阿帕奇.htaccess

我想當前的URL轉換:

http://example.com/average_temperatures?city1=istanbul&city2=ankara&city3=london

爲此格式:

http://example.com/average_temperatures/istanbul/ankara/london

這是我的.htaccess的內容:

RewriteEngine On 

RewriteRule ^average_temperatures/([^/.]+)/([^/.]+)/([^/.]+)/?$ average_temperatures?city1=$1&city2=$2&city3=$3 [L] 

有人可以請指出我在正確的方向可能會在這裏?我很欣賞任何提示。謝謝。

+0

看看你的http服務器錯誤日誌文件,以確保沒有錯誤發生。然後啓用重寫日誌記錄,這可以讓您瞭解重寫引擎中發生了什麼。 – arkascha

+0

你已經錯過了文件擴展名(** .php **或** .jsp),看看RewriteRule的替換模式,「average_temperatures ** .ext **?city1 = $ 1&city2 = $ 2&city3 = $ 3」 **)你正在傳遞get參數的文件(查詢字符串值) –

+0

嘿,這個頁面是由一個Flask應用程序生成的,所以我猜這個擴展名只是「.html」(儘管它在URL),但我試過了(average_temperatures.html?city1 = $ 1&city2 = $ 2&city3 = $ 3 [L]),但它仍然無效。 –

回答

0

使用這個可愛的網站來調試你的htaccess規則:http://htaccess.madewithlove.be/ - 因此,你的規則匹配。所以這個問題是別的。 (也許你missunderstood網址重寫的目的是什麼?)

您的規則完全重寫的外部請求

http://weather-averages.co.uk/average_temperatures/istanbul/ankara/london 

http://weather-averages.co.uk/average_temperatures?city1=istanbul&city2=ankara&city3=london 

請記住,這條規則並不適用於鏈接你放在你的html裏面。你需要改變你的<a href=""> s到針對搜索引擎優化的URL,你要提供:

<a href="http://weather-averages.co.uk/average_temperatures/istanbul/ankara/london"> 

將被改寫,讓你有以下$_GET - 陣列可供選擇:

$_GET = array (
    "city1" => "istanbul", 
    "city2" => "ankara", 
    "city3" => "london" 
); 

PS 。:在您的重寫規則中,您錯過了擴展名 - 也許這是您的問題?

average_temperatures?city1=$1&city2=$2&city3=$3 [L] 
average_temperatures.php?city1=$1&city2=$2&city3=$3 [L] 
+0

嗨Dognose, 我希望我在RegEx中有一個錯誤,這個錯誤很容易解決,但是隨着規則匹配和啓用.htaccess,我擔心這個問題比這更深。 你能否澄清你的意思是「外部請求?」。對不起,如果這個問題聽起來很愚蠢,但我剛剛開始,這是我的第一個愛好項目。另外,它不應該從/ istanbul/ankara改寫成?city1 = Istanbul&city2 = Ankara&,但相反,對嗎? 這是一個Flask應用程序,帶有動態生成的內容,我嘗試在規則中添加「.html」,但它也不起作用。 –

+0

@scott_m看起來你的困惑是關於URL重寫。你的服務器只懂一種語言:這是'?city = 1&city = 2'風格。但是你希望你的訪問者看到'/ ankara/istanbul'風格 - (這就是我所說的「外部」URL)。因此,您的htaccess需要將訪客請求(外部網址)轉換爲您的服務器可以理解的內容('?'-style)。所以它應該完全重寫這種方式。 – dognose

+0

@scott_m這是相當含糊的,我知道:默認是'?mode = xy'。所以,有人可能會認爲,URL重寫需要將'?mode = xy'改爲'/ xy',但是它反過來,總是在「請求方向」:訪問者調用'/ xy' - 所以,htaccess需要使用'?mode = xy',這樣你的服務器才能理解它。 – dognose