Apache mod_rewrite永远不会重写现有目录,除了目录是某个目录?

时间:2013-01-22 03:01:51

标签: apache mod-rewrite apache2

网站http://www.example.com/在CMS上运行,所有内容都按照.htaccess中设置的规则进行操作。访问http://www.example.com/时,用户将被重定向到以下路径之一,具体取决于用户的语言设置:

http://www.example.com/en/
http://www.example.com/fr/

/en//fr/目录确实不存在,它们由CMS处理。

我正在向网站添加新的部分(investors/),但现在不希望它通过CMS,但我不希望用户注意到它。

原始.htaccess文件包含以下行:

# never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# rewrite everything else to index.php
RewriteRule .* index.php [L]

如果请求的路径以/en/investors//fr/investors/开头,我设法让它不通过CMS:

# never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# rewrite everything else to index.php
# except investors' section
RewriteRule ^(?!\/en\/investors|\/fr\/investors).+ index.php [L]

我将/en/investors//fr/investors/目录上传到服务器上并且工作正常,但现在主页已损坏,因为现在存在/en//fr/目录。如何为该规则添加例外?

1 个答案:

答案 0 :(得分:0)

简单地添加另一条规则来覆盖2个目录,例如

RewriteRule ^(en|fr)/?$ index.php [L]