通过htaccess中的regex删除文件夹

时间:2017-03-27 17:50:59

标签: regex .htaccess

虽然我很喜欢编写脚本和编程的东西,但我从未真正理解的是正则表达式。

我正在调整使用site.com/username/p/seo-friendly-link网址结构的第三方脚本。我希望它是site.com/username/seo-friendly-link而不是

其.htaccess文件

RewriteRule ^([A-Za-z0-9_-]+)/p/(.*)$ ./dir/pages/post.php?user=$1&pid=$2
RewriteRule ^p/(.*)$ ./dir/pages/post.php?pid=$1

当我删除/ p为

RewriteRule ^([A-Za-z0-9_-]+)/(.*)$ ./dir/pages/post.php?user=$1&pid=$2

我将apache日志中的错误视为

[error] [client ::1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

我已尝试将L添加到未修改规则的末尾,但仍会出现相同的错误。

我想学习正则表达式,但我觉得这个特殊的例子并不是那么友好的noob,而是会导致更多的混乱。

有人可以解释这两条线的作用,如何获得我需要的东西或为什么它不像看起来那么简单?

2 个答案:

答案 0 :(得分:2)

不是.htaccess配置规则的专家,但就正则表达式而言,问题似乎是struct M1:TestTwoDelegate { var m2 = M2() weak var delegate:TestOneDelegate? { didSet { m2.delegate = self } } 涵盖了太多可能的匹配,因为最后^([A-Za-z0-9_-]+)/(.*)$组实际上匹配任何内容。

换句话说,(.*)匹配^([A-Za-z0-9_-]+)/(.*)$username/p/seo-friendly-link。它匹配目标部分username/seo-friendly-link,可能导致无限重定向。

要限制正则表达式,您应该从第二组中排除dir/pages/post.php?user=$1&pid=$2。因此,使用/代替(.*)而不是[^/]*,其中[^/]定义与/以外的任何字符匹配的character class

RewriteRule ^([A-Za-z0-9_-]+)/([^/]*)$ ./dir/pages/post.php?user=$1&pid=$2

答案 1 :(得分:0)

将第一行更改为

RewriteRule ^([A-Za-z0-9_-]+)/p/(.*)$ ./dir/pages/post.php?user=$1&pid=$2 [L,NC,R]

这使得url重定向并断言它是要检查的最后一条规则。