2017-07-24 1303 views
1

我有一個URL https://example.com/portfolio/portfolio/page/2/我需要重定向到https://example.com/contact/擺脫不必要的子目錄後綴的網址與的.htaccess

我的企圖是:

RewriteCond %{REQUEST_URI} ^/portfolio/portfolio/page/2/ [NC] 
RewriteRule ^/?/page/2/(.*)$ /contact/$1 [R,L] 

OR

Redirect 301 /portfolio/portfolio/page/2/ /contact/ 

兩個失敗並重定向到https://example.com/contact/page/2/而不是僅僅https://example.com/contact/

任何幫助,將不勝感激。

+0

爲什麼在'^ /'之後使用'?'?你是否想匹配任何0+字符?然後用'。*'替代'?'' –

+0

你的第二條規則是正確的根據這個小提琴http://htaccess.mwl.be?share=b5f46c13-1fed-57ac-b919-e8598c4bd986 – fxlacroix

+0

@WiktorStribiżew我改成了'RewriteRule^/portfolio/portfolio/page/2/(.*)$/contact/$ 1 [R,L]'沒有工作 – RWS

回答

1

根據您的意見給了這個問題的附加信息,這是簡單的重寫規則,你想:

RewriteEngine on 
Rewrite /?portfolio/portfolio/page/2/?$ /contact [END] 

如果你想改變URL可見的瀏覽器,那麼你需要實現外部重定向:

RewriteEngine on 
Rewrite /?portfolio/portfolio/page/2/?$ /contact [R=301] 

如果這導致內部服務器錯誤(HTTP狀態500),然後有機會,你工作很舊版本的Apache HTTP服務器。嘗試使用[L]標誌,而不是[END]。在這種情況下,您將在您的http服務器錯誤日誌文件中看到相應的條目。


而且一般提示:你應該總是喜歡在http服務器(虛擬)主機配置,而不是使用動態配置文件(.htaccess風格文件)裏這樣的規則。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。只有當你不能控制主機配置(讀取:真正便宜的主機服務提供者)或者你有一個依賴編寫自己的重寫規則的應用程序(這是一個明顯的安全噩夢)時,它們才被支持作爲最後一個選項)。

+0

在我的情況下,我確實沒有任何其他方式來影響web服務器而不是.htaccess。我解決了這個問題。我應該發佈我的整個htaccess文件。事情發生在字符串「Redirect 301/portfolio/portfolio/page/2/https://example.com/contact/」之前的某個地方,我有'Redirect 301/portfolio/portfolio// contact /'而後者導致我有胡言亂語。我所需要做的就是將重定向301/portfolio/portfolio/page/2/https:// example.com/contact /'ABOVE'重定向301/portfolio/portfolio// contact /'。對不起,麻煩了。今天吸取的寶貴教訓... – RWS

+0

啊,當然。再一個例子清楚地表明,應該儘可能詳細地提出與問題一致的細節。儘管如此,請正確處理尾部斜線('/')。 – arkascha