2017-10-19 92 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