3

I'm building a mini framework that supports:

mysite.com/template/
mysite.com/template/action/
mysite.com/template/action/model/

Using as a bootstrap:

RewriteEngine On
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

But for any request:

mysite.com/template/action/model/**extra/stuff/should/vanish/**

So that the maximum URL size will always drop anything extra:

mysite.com/template/action/model/
4

1 回答 1

4

你的意思是这样的吗?

# if more than 3 nodes deep          v--- the extra stuff should vanish
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/.+ /$1/$2/$3/? [R=301,L]

这会重定向浏览器,以便仅在超过 3 个时保留 3 个节点。这可能会超出您的路由规则。


编辑:

因为在第四块这个案例不成立:site.com/a/b/c/?d

您需要一个特定的规则来匹配这里的查询字符串,这超出了您在 a 的表达式中可以做的事情RewriteRule。您可以将这些规则放在上述规则之前或之后:

# Check if there's a query string
RewriteCond %{QUERY_STRING} !^$
# if there are exactly 3 nodes, then remove the query string
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1/$2/$3/? [R=301,L]

查询字符串(后面的所有内容?)不是重写引擎中使用的 URI 的一部分,它需要一个特殊条件。

于 2012-08-02T16:34:48.040 回答