2016-01-12 18 views
1

我试图通过“重定向lang”前缀在Apache vhost conf中的所有URI并将“/”更改为“%”。例如:正则表达式在Apache的RewriteRule前缀URI并执行查找/替换

http://example.com/category/article/how/to/redirect 

将变为:

http://example.com/redirect-lang/category%article%how%to%redirect 

要做到这一点,我写了下面:

RewriteRule (.*)([^\/]+)\/([^\/]+)\/?$ http://%{HTTP_HOST}$1$2-$3 
RewriteCond %{REQUEST_URI} ^(?!(.*)(\/?redirect)) [NC] 
RewriteRule (.*)$ http://%{HTTP_HOST}/redirect/$0 [L] 

第一RewriteRule完美的作品独自一人在替换 “/” 与“ %“,但是当添加RewriteCond和第二个RewriteRule时,它会无限循环。

有人可以帮助我吗?

+0

的''%存在将使URL无效。你为什么要用'%'替换'/'? – anubhava

+0

接收它作为PHP中的路由变量并处理它 –

+0

PHP也可以使用'/'接收完整的URL,并且可以在'/' – anubhava

回答

1

为了这个规则重写每一个URL前缀/redirect-lang/用作第一个规则

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^((?!redirect-lang/).*)$ redirect-lang/$1 [L,NC] 
+0

有500个内部错误。即使转义“/”:( –

+0

[核心:错误] [pid 6348:tid 1020] [客户端127.0.0.1:50326] AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制使用'LimitInternalRecursion'如果有必要的话可以增加限制,使用'LogLevel debug'来获得回溯 –

+0

我向你保证,这是我唯一的重定向!! –