Existe uma solução, mas não é simples.
Use RewriteMap
.
Veja como eu faria:
Crie um arquivo RewriteMap . Consulte aqui para mais informações . Este é um ficheiro de texto muito simples com: primeiro, o URL errado sem o '/' , então um espaço (pelo menos) e depois o URL certo, da seguinte forma:
ok /folder1/
ok /folder2/
ok /folder3/
Em seguida, o código:
RewriteMap myfoldermap \
dbm:/web/htdocs/yourwebsite.com/rewriterules/myfoldermap.map
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)
# Now in '%1' there's the name of the folder
# Don't touch the URL but...
# ...check if it exists in the map file
RewriteRule (.*) - [QSA,E=FOLDERMAP:${myfoldermap:%1|notfound}]
# if the environment is neither empty or not found...
RewriteCond %{E:FOLDERMAP} !^(notfound|)$
# this means we found something...
# => apply the RewriteRule
RewriteRule ^(.*)$ router.php [L,QSA]
Se não funcionar: leia minhas "duas dicas" habituais e adicione o registro de regravação em sua pergunta.
Duas dicas:
Se você não estiver em um ambiente hospedado (= se for seu próprio servidor e puder modificar os hosts virtuais, não apenas os arquivos .htaccess
), tente usar a diretiva RewriteLog
: ele ajuda você a rastrear esses problemas:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
Minha ferramenta favorita para verificar o regexp:
link (não se esqueça de escolher ereg (POSIX) em vez de preg (PCRE)!)