2014-03-02 527 views
2

故事:我正在開發一個網站,主目錄中有三個子文件夾,分別爲/ a /,/ b /和/ c /。 site.com,site.com/a/,site.com/b/和site.com/c/中的內容有所不同;但是,代碼和文件是完全相似的。爲了減少該碼量,我用下面的.htaccess規則和刪除的類似碼/ A /,/ B /和/ c /子文件夾:htaccess重定向規則,主文件夾和子文件夾重定向

RewriteRule ^(a|b|c)/(.*) $2?folder=$1 [L,QSA] 

一切正常,但低於是唯一的問題。 問題:我在所有四個頁面的菜單欄中都有一個搜索按鈕(即site.com,site.com/a/,site.com/b/site.com/c/)。當我在子頁面搜索一句話的「Hello World」(即site.com/a/site.com/b/site.com/c/),返回結果的格式如下: site.com/hello-world/?folder=a site.com/hello-world/?folder=b site.com/hello-world/?folder=c 但是,上面的搜索結果必須在下面的格式返回,而不是: site.com/a/hello-world/ site.com/b/hello-world/ site.com/c/hello-world/ 是否有任何.htaccess規則來解決這個問題?

回答

2

301重定向site.com/hello-world/?folder=c您可以使用此規則=>site.com/a/hello-world/

RewriteCond %{THE_REQUEST} \s/+([^?]+)\?folder=([^\s&]+) [NC] 
RewriteRule^/%2/%1? [R=301,L,NE] 

只要確保這個放在現有規則

+0

感謝您的回答,我在現有規則之前嘗試了您的代碼,並且仍然沒有運氣。 – Sami

+0

抱歉有錯字,只是修正了它。再試一次。 – anubhava

+0

非常感謝你的幫助,工作得很好。我再次感謝你。歡呼聲 – Sami

1

您無法在.htaccess中解決問題。您需要修復應用程序,以便爲搜索結果生成正確的URL。目前它在生成搜索結果時正在使用當前頁面的URL,這就是爲什麼你會得到類似的結果。

+0

前之前,我刪除了類似的代碼在/ A /,/ b /和/ c/sufolders,結果以正確的格式返回,如site.com/a/hello-world/ site.com/b/hello-world/ site.com/c/hello-world/。 – Sami

+0

那麼,在這種情況下,我認爲Apache沒有使用重定向規則,因爲這些文件已經可用。問題在於生成搜索結果的實際代碼中,請查看它。 –