Este par:
RewriteCond %{REQUEST_URI} !^(/index\.php|/assets|/robots\.txt|/sitemap\.xml|/favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
Trate os dois URIs de maneira diferente. /sitemap.xml
não corresponde ao RewriteCond e é passado para o sistema de arquivos. /sitemap
corresponde ao RewriteCond e é reescrito para /index.php/sitemap
.
A pergunta é: o que seu aplicativo faz com esse URI? Se encontrar o arquivo sitemap.xml
e o servir, isso explicaria o comportamento que você está vendo.
Eu realmente não consigo ver como essas reescritas poderiam veicular /sitemap.xml
quando a solicitação era /sitemap
. Uma maneira de verificar se a solicitação está sendo executada ou não no seu aplicativo é criar um novo arquivo de registro e configurar seu aplicativo para acrescentar uma linha para cada solicitação que inclua a data, o URI da solicitação e o que ela planeja exibir (ou de que módulo está executando o código).
Você pode ter que elaborar um pouco mais sobre o problema de "barra extra" e talvez forneça alguns exemplos. Eu não entendo muito bem a questão.
Com os comentários, agora entendo que o problema da barra está aqui:
RewriteCond %{THE_REQUEST} /index\.(php|html)
RewriteRule (.*)index\.(php|html)(.*)$ /$1$3 [r=301,L]
Para se livrar da barra extra, basta incluí-la na outra parte que você está tirando: ( index.php
):
RewriteCond %{THE_REQUEST} /index\.(php|html)
RewriteRule (.*)index\.(php|html)/(.*)$ /$1$3 [r=301,L]