2013-11-04 56 views
1

因此,我制定了一個重寫規則,它接受URL字符串/site-aboutpage的請求並將其重寫爲/site/site-aboutpage。這效果很好!然而,我有一個或兩個連字符的URL字符串,我不知道如何處理這些。 /site-name/aboutpage/site-name/about-page應該重寫/site-name/site-name-aboutpage/site-name/site-name-about-page用一個或多個連字符處理URL字符串的重寫規則

這裏的URL的網站,我需要爲創建規則:

/biomedical-sciences 
/allied-health 
/body-donation-program 

上述網址是否正確,並且是各自站點的根目錄。下面

重寫規則改變的URL

/allied/allied-health 
/biomedical/biomedical-sciences 
/body/body-donation 

我想我可能會需要對上述項目的兩個規則。但是缺點是根目錄URL不應該被重寫,只有在最後一個字之後有字符,即/allied-health不會被重寫,/allied-health-about將被重寫爲/allied-health/allied-health-about。有道理?

這裏就是我有

RewriteCond %{REQUEST_URI} !^/body-donation-program 
RewriteCond %{REQUEST_URI} !^/allied-health 
RewriteCond %{REQUEST_URI} !^/biomedical-sciences 
RewriteRule ^([^/]+)-([^/]+)/?$ /$1/$1-$2/ [L,R=301] 

前三個規則條件語句,這樣在最後一行重寫規則不會干涉他們。

+0

如果'/ body-donation-program'被重定向到'/ body/body-donation',那麼如何將/ allied-health-about重寫爲/ allied-health/allied-health-about'混亂。 – anubhava

+0

嘿anubhava,謝謝你的回覆。這裏需要注意的是頂級目錄是學校或程序的名稱。 '/ body-donation-program'和'/ allied-health'都是程序。我們將網站遷移到CMS。之前我們的網址結構是'平坦的'。所以一切都通過連字符分開。因此,舊網址的結構類似於「/ body-donation-program-aboutpage」。現在,網址的結構類似於'/ body-donation-program/aboutpage'實際上,我們只想抓住舊網址並將它們路由到相應的頁面。不知道這是否有助於澄清事情。 –

+0

還不清楚。在最後一個連字符前面的文本是否爲目錄名,文本的其餘部分是文件名是否總是如此? – anubhava

回答

0

我認爲它會爲你工作:

RewriteCond %{REQUEST_URI} !^/body-donation\-program 
RewriteCond %{REQUEST_URI} !^/allied\-health 
RewriteCond %{REQUEST_URI} !^/biomedical\-sciences 
RewriteRule ^([^/].*)\-([^/].*)/?$ /$1/$1\-$2/ [L,R=301] 

^([^/].+)\-([^/].+)/?$將匹配:

任何字符,除了/一次或多次,-,任何字符除了/一個或更多次,/ (可選),end

+0

起初我錯了。我認爲現在是對的。 – Manolo

+0

嘿馬諾洛, 當我試過這個規則'RewriteRule ^([^ /]。+)\ - ([^ /]。+)/?$/$ 1/$ 1- $ 2/[L,R = 301]似乎會導致一個大的URL請求字符串錯誤。那裏有任何想法? –

+0

它在URL中重寫了什麼內容。 – Manolo

相關問題