2011-12-05 50 views
0

我有脑痉挛。我使用htaccess重写一个页面,有时候通过的变量在变量中会有一个/(正斜杠)。有时会出现斜线,有时候不会,但所有这些被视为一个变量是非常重要的。我真的不想再编程我有str_replace()所有的页面切换-/,然后对数据库的调用。例如:htaccess正则表达式与“/”

http://www.example.com/accounting/finance.htm 

Accounting/Finance是一个变量,我需要.....它不是在一个会计目录,然后有一个名为finance.htm在结算页。到目前为止,我有类似

RewriteRule ^([A-Za-z]+.*[A-Za-z]*)\.htm$  mypage.php?page=$1 [L,NC] 

但它不喜欢它。

有人可以帮我吗?

在此先感谢。

回复评论/回答

,我正在寻找的具体规则是这样的.....

[字符串的开始] ... 1个或多个字母... [的可能性/后跟1个或多个字母]的.htm [字符串的结尾]

下面给出不工作的两个答案......我敢肯定它保持它当作一个目录,而不是一个实际的“文件名”。当我删除斜杠页作品就好...

+1

林生锈的正则表达式,但你可以这样做([A-ZA-Z /])? –

+0

@DevinM我试过[A-Za-z /] +,它似乎不喜欢那样。我也尝试过[A-Za-z \ /] +和[A-Za-z] + \/* [A-Za-z] + \。htm,它也不喜欢那样。 – n0nag0n

+0

我认为你的例子没有起作用的原因是“。*”是贪婪地把所有东西都吃到URL的末尾,所以它没有任何东西可以与“.htm”匹配。 但是,我不完全清楚你想要什么URL不匹配,所以无法帮助超越。你是否希望这条规则匹配以“.htm”结尾的任何内容? – IMSoP

回答

4

如果我得到你的权利,你只需要这一个:

([A-Za-z/]*)\.htm 

它应该的每个组合/或不可─工作/

例如

accounting/finance.htm 
test.htm 
+0

这是一个小小的调整。 :) – n0nag0n

+0

很棒 - 你调整了什么? – Nebel54

+0

我有一些其他的自定义角色需要扔到那里。只是因为某种原因,这给了我最多的悲伤......谁知道为什么。它现在起作用,这就是我所关心的。 – n0nag0n

2

斜杠只是另一个字符。除此之外,你的正则表达式看起来不必要的复杂。例如,.*[A-Za-z]*是不是从.*不同,也可以[A-Za-z]如果使用[NC]标志缩短至[a-z]

你准确的规则是不完全清楚,但你可能要在这条线的东西:

RewriteRule ^([a-z/]+)\.htm  mypage.php?page=$1