2011-07-24 119 views
0

有什么办法通过mod_rewrite隐藏Url的一部分。我目前正在使用url.html的一部分来拆分请求的页面和查询字符串。通过mod_rewrite删除url的一部分

http://www.example.com/page/article/single.htm/articleid=8 

这将让我知道请求的页面是:

http://www.example.com/page/article/single 

而且追求字符串是:

article=8 

理想我希望有这样的在不显示.htm的情况下使用相同的网址

http://www.example.com/page/article/single/articleid=8 

的变量在查询刺数随着确实与.htm前水平的数量,以便该规则将需要动态

感谢

回答

1

也做多个查询字符串参数,怎么办你想看看?我从这开始,它使这个简单,然后在下面变得更加棘手。

http://www.example.com/page/article/single/articleid=8&anothervar=abc 

试试这个规则:

RewriteRule ^([^=]+)/(.+)$ $1.htm?$2 [NC,L] 

该处理的一个或多个查询字符串参数,但需要至少一个。这会查找任何没有=的东西,最多只能是斜线,然后是其他所有内容。基本上,它使用=作为路径与查询字符串部分的指示符;但实际上将其分割成斜线。 (数控是我的一个习惯,没有必要在这种情况下,但是当我离开它,我忘了在需要时)。

为了让查询字符串是可选的,因此它可以处理几乎

http://www.example.com/page/article/single 

我发现最简单的两种规则,而不是试图混入到一个规则是:

RewriteRule ^([^=]+)$ $1.htm [NC,L] 
RewriteRule ^([^=]+)/(.+)$ $1.htm?$2 [NC,L] 

你可以做一些更漂亮,使用一切斜线包括多个查询字符串参数,就像这样:

http://www.example.com/page/article/single/articleid=8/anothervar=abc 

这是一个有点毛茸茸的,但我想这样的作品(不能让他走了......)

的另一条规则处理与&符号代替斜线,然后做重写如上。这是更容易保持直线 - 也许有办法做到这一切在一次,但是这是棘手的足以让我:

RewriteRule ^([^=]+)$ $1.htm [NC,L] 
RewriteRule ^([^=]+)/([^=]+=[^/]+)/([^=]+=.+)$ $1/$2&$3 [NC,LP] 
RewriteRule ^/([^=]+)/(.+)$ /$1.htm?$2 [NC,L] 

的第一条规则同上,但处理没有查询字符串的。这只是让它走开了。

第二条规则是一个循环LP,这是我在示例中倾向于找到的一个循环,只要您有未知数量的替换。在这种情况下,它将用&符替换上一个querystring-slash,并循环直到只剩下一个(在第三个规则中将问号留下)。

它正在寻找这些articleid=8/anothervar=abc中最后一个还剩两个参数。它取代了斜线与像articleid=8&anothervar=abc

在字的符号,它在寻找(并在括号中捕获):

(not-equalsign) slash (not-equalsign equalsign not-slash) slash (not-equalsign equalsign anything) 

此排队为:

(not-equalsign)      /page/article/single 
slash        /
(not-equalsign equalsign not-slash) articleid = 8 
slash        /
(not-equalsign equalsign anything) anothervar = abc 

它取代了最后一个斜线用一个&符号,并在循环之后,将它变成上面的第一个草稿:http://www.example.com/page/article/single/articleid=8&anothervar=abc。第三条规则如上所述处理。

注意:这些也假设你的所有网址都是这样的,因为它们会对所有的东西都贴上.htm。如果你还想允许显式/something/page.htm,那么这些规则如果已经存在,就需要与.htm不匹配 - 类似的东西。或者,也许最初的规则是寻找.htm,并停止在那里重写。或者,也许只能为/页面路径执行此操作。

+0

哇,谢谢。我已经有了一些使用第一和第二规则组合的工作,现在只需要对其执行一些测试。 –