2010-07-13 85 views
1

我想使用mod_rewrite将所有顶级目录重定向到一个文件。mod_rewrite:将顶级目录重定向到一个文件

所以下面应该有重定向:

- http://example.com/test 
- http://example.com/test8/ 
- http://example.com/test_9231/ 

下应该不会重定向有:

- http://example.com/test.php 
- http://example.com/test_9231/test/ 
- http://example.com/test/test.php 
- http://example.com/test_9231/test 

的目录中没有将实际存在。目录名称将只包含这些字符:A-Za-z0-9_-

我试过这个RewriteRule /(.*) /index.php [L]但子目录仍然重定向。
我认为在第二个括号之后加上一个斜杠就可以完成这项工作,但它只是打破了重定向。

回答

2
RewriteRule ^/[A-Za-z0-9_-]+/?$ /index.php 

这将匹配一个斜线,然后根据你的天赋,那么另一个可选的斜杠的名称,然后字符串的结尾,所以子目录不匹配

+0

去时,我得到错误404 http://example.com/test/ – 2010-07-14 01:09:11

+0

你在.htaccess中做这个吗?你有其他的重写规则吗? – unbeli 2010-07-14 06:37:19

+0

是的,在.htaccess中。我确实有其他的规则,但是我没有测试你的代码,我得到了相同的结果。 – 2010-07-14 10:38:32

0
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/?[^/]+/?$ /index.php [L] 
+0

一切都很好,除了http://example.com/test.php也重定向 – 2010-07-14 01:10:18

+0

是的,没有打扰赶上'。',因为我认为文件将存在或者你想创建一个在PHP本身很好的404页面(我会,没有人会帮助通用404的,有一个很好的页面提示和/或搜索形式将是更好的恕我直言)。但这不是问题,所以确实不符合法案。 – Wrikken 2010-07-14 17:19:27

相关问题