2012-03-30 112 views
0

我相對較新的重寫和不能得到以下工作。 (顯然我的域名並沒有在測試網站,但不希望我一個適當上市作爲其尚未完成。)Apache重寫規則用於創建用戶友好的URL

我想重寫測試網站/漁業/區域/ region.php區=笛

來?

測試網站/釣魚/ fife.php

然後要重寫測試網站/漁業/區域/漁業/ fishery.php?URL = goldenloch

測試網站/釣魚/笛/ goldenloch.php

我使用以下規則

RewriteRule ^fishing/([^/]*)\.php$ /fishing/region/region.php?region=$1 [L] 
    RewriteRule ^fishing/([^/]*)/([^/]*)\.php$ /fishing/region/fishery/fishery.php?url=$2&region=$1 [L] 

每個規則適用於自己的,但是當組合只有最後一個工作。我已經添加了[L]標誌,我認爲應該停止符合條件的任何其他重寫規則。然而這仍然不起作用。

+0

看起來不像第一個重寫行將匹配任一個url。第二個重寫行只會匹配第一個url。 – 2012-03-30 22:14:56

+0

怎麼回事?第一條規則應該匹配併產生釣魚/ fife.php? 任何更正將有所幫助:) – 2012-03-30 22:43:01

+0

不要介意我的評論,我對你想要重寫的方向感到困惑。 – 2012-03-30 23:44:12

回答

0

原來我需要做

RewriteRule ^fishing/([^/]*)/([^/]*) fishery.php?url=$2&region=$1 [L] 
    RewriteRule ^fishing/([^/]*) region.php?region=$1 [L] 

帶有較長的查詢第一,它工作得很好。

0

我想這和它似乎工作:

RewriteRule ^/fishing/([^/]*)\.php$ /fishing/region/region.php?region=$1 [R,L] 
RewriteRule ^/fishing/([^/]*)/([^/]*)\.php$ /fishing/region/fishery/fishery.php?url=$2&region=$1 [R,L] 

從你的(我認爲),唯一的區別是領先/我用重定向(R)剛看到這是工作。您應該能夠刪除R,以便用戶在其瀏覽器中看不到真實的網址。

以防萬一你不是,我會建議使用命令行工具(如curl),而不是瀏覽器來測試這一點,只是讓你避免任何緩存或其他煩惱:

curl -vv 'http://localhost/fishing/fife/goldenloch.php' 

你將在服務器的響應中看到Location標題,這就是工作中的重定向。就我而言,我看到:

Location: http://localhost/fishing/region/region.php?region=fife 

Location: http://localhost/fishing/region/fishery/fishery.php?url=goldenloch&region=fife 
+0

似乎沒有工作../fishing/fife.php轉到404 .htaccess被放置在網站的根目錄..這可能會導致問題? 在此服務器上找不到請求的URL /fishing/fife/goldenloch.php。 雖然region.php是在正確的地方(fishing/region/region.php) 也/ fishing/region/region.php?region=fife正常工作。 – 2012-04-01 23:48:26

+0

絕對是。htaccess可能是問題。嘗試把conf放在主要的apache httpd.conf中,看看它是否在那裏工作。如果是這樣,那麼如果你真的想要使用.htaccess文件,那麼你需要設置'AllowOverride',就像你的中的'AllowOverride All'一樣。 – 2012-04-02 16:04:04

+0

如果我只放在.htaccess文件中的規則之一,那麼它工作正常。當我把它們放在只有後面一個工作的文件中。把釣魚/面前擺在一起,使他們都沒有工作。 – 2012-04-02 18:16:35