【发布时间】:2011-02-10 02:25:35
【问题描述】:
我已经找了几个小时的答案了,很抱歉,如果这个问题被问了很多次,我错过了。
我基本上想重写以忽略第一个目录。路径中的第一个目录会有所不同,所以我认为我可以使用正则表达式。但是我的正则表达式一直与文件名匹配:
RewriteRule ^([a-z]+)?/(.+)$ $2 [L]
如果我深一层,这可行:
http://test.domain.com/one/index.php
我得到了根目录的实际索引页。这就是我想要的。但如果我要更深入:
http://test.domain.com/one/two/anotherfile.php
我收到一条消息说 /anotherfile.php 未找到,因为它正在根目录中查找它。所以看起来我的正则表达式在最后一个 [a-z] 之后没有停止。感谢您的帮助。
如果这很重要的话,这就是 Apache2。
【问题讨论】:
-
假设输入是
one/index.php和one/two/anotherfile.php,正则表达式按预期工作 - 它确实为第二个字符串返回two/anotherfile.php。您的问题可能出在其他地方吗?你能发布更多细节吗? -
谢谢,但我不知道还能是什么。这是我所拥有的: RewriteEngine On RewriteCond %{REQUEST_URI} !^/lib RewriteCond %{REQUEST_URI} !^/images RewriteRule ^([az]+)?/(.+)$ $2 [L] this: test.domain.com/one/two/index.php返回完全相同的页面(/index.php):test.domain.com/one/index.php
-
还有什么我应该尝试的吗?它必须是正则表达式是贪婪的。如果我将正则表达式更改为 "RewriteRule ^(one)?/(.+)$ $2 [L]" 它工作正常。但我希望使第一个目录动态化。
-
正则表达式不应该那样做,但可以试试
RewriteRule ^([a-z]+)/(.+)$ $2 [L]。第一组不是可选的 - 我不知道 Apache RewriteRule,但我假设如果它失败了它会继续前进,所以这应该没问题。 -
我已经在两台服务器上尝试过这个,我得到了相同的行为。有谁能够验证这应该有效吗?如果是这样,我知道问题出在其他地方。
标签: regex apache mod-rewrite