Há algumas coisas em jogo aqui. Primeiro, a diretiva Alias
quer que seu lado direito seja um caminho físico absoluto no servidor: você quer
Alias /runs /mysite/xhprof/xhprof_html
<Directory /mysite/xhprof/xhprof_html>
Order allow,deny
Allow from all
AllowOverride All
</Directory>
Em segundo lugar, o RewriteRule RewriteRule .* index.php
corresponde não apenas a http://.../runs
, mas também a qualquer URL que começa com http://.../runs/
, mesmo, por exemplo, http://.../runs/css/...
. Existem algumas maneiras de contornar isso.
Opção 1: você pode ter um RewriteRule somente redirecionando a raiz das execuções para index.php:
RewriteRule ^$ index.php
RewriteRule ^/$ index.php
Opção 2: você pode fazer com que o seu mod_rewrite configure coisas de casos especiais que existem como arquivos e redirecione tudo para index.php
# Require the path the request translates to is an existing file
RewriteCond %{REQUEST_FILENAME} -f
# Don't rewrite it, but do stop mod_rewrite processing
RewriteRule .* - [L]
# Now, redirect anything into index.php
RewriteRule .* index.php
Opção 3: você pode especificar alguns URLs especiais e redirecionar todo o restante para index.php
RewriteCond $1 !^css/
RewriteCond $1 !^js/
RewriteRule .* index.php
Opção 4: se você quiser que qualquer mapeamento de URL para um diretório mostre um arquivo index.php
(como index.html
), há uma maneira realmente simples, que é provavelmente o que você deseja. Você pode colocar o seguinte em .htaccess
ou dentro do bloco <Directory>
em directories.conf
:
DirectoryIndex index.php index.html
Nota de rodapé: o RewriteRules acima basicamente elimina todo o URL de qualquer solicitação que acaba sendo mapeada para index.php
. Isso inclui sequências de consulta, portanto /runs/?foo=bar
é o mesmo que /runs/
. Se não é isso que você quer, você precisa de uma regra como
RewriteRule ^(.*)$ index.php/$1 [QSA]
que preserva as informações de caminho (a parte $1
) e a string de consulta ("QSA"="anexação da string de consulta".)
Já escrevi demais? :)