2017-10-19 94 views
2

我試圖重定向每個URL都沒有#相同,但與 /path/後。Apache RedirectMatch與正則表達式

例子:

此網址:https://www.example.com/path/test/test

需要重定向到該網址:https://www.example.com/path/#/test/test

所以我寫了這個重定向比賽:

RedirectMatch permanent ^/path/(?!#)(.*)$ /path/#/$2 

但它不工作。

瀏覽器顯示此消息:ERR_TOO_MANY_REDIRECTS

+1

其實,一個前瞻(正面或負面)是一個非捕獲組。然後在你的表達式中,$ 2將始終保持爲空,因爲路徑/後面的文本將在組1中捕獲。 – PJProudhon

回答

2

你可以使用這個規則在您的網站根目錄的.htaccess:

RewriteEngine On 

RewriteRule ^/?(path)/(.+)$ /$1/#/$2 [L,NE,NC,R=301] 

它會將/path/test/test重定向到/path/#test/test

無需檢查#RewriteRule中的存在,因爲客戶端瀏覽器無論如何都不會在#之後向Web服務器發送任何部分。

+1

謝謝你,完美的作品! –

0

你可以試試這個:

^/path/([^#]+)$ /path/#/$1 

拍攝的組([^#] +)代表任意字符串,最低1個字符,不包含'#'

+0

當我嘗試訪問'/ path/something'時,我被重定向到'/ path /#'只有在沒有'something'參數的情況下:/ –

+0

在測試時我看不到任何正則表達式的問題,所以可能是因爲某些原因,/ something部分在匹配之後被剝離出來。 – Anthony