Regra de reconfiguração do Apache no Dispatcher

1

Como posso reescrever uma regra para http://example.com/abc para reescrever / redirecionar para http://example.com/abc.html , mas isso deve funcionar quando eu tiver o URL como http://example.com/abc/def.html . Atualmente, quando eu faço redirect 301 "abc" "abc.hml" , o segundo URL também está redirecionando para http://example.com/abc.html/def.html .

Minhas regras atuais.

<IfModule rewrite_module>
RewriteEngine On

RewriteRule ^/$ /content/aaa-123/abc.html [PT,L]
RewriteRule ^/index.html$ /content/aaa-123/abc.html [PT,L]
RedirectMatch ^/abc$ /abc.html

RewriteCond %{REQUEST_URI} !^/(.*)/$
RewriteCond %{REQUEST_URI} !^(.*)\.(.*)$

RewriteRule ^/(.*)$ /content/$1/ [L]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L]

ErrorDocument 404 /errors/404.html    
<IfModule mod_expires.c>
  ExpiresActive on  
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>
    
por Sreekanth Sagar 25.08.2016 / 19:54

2 respostas

1

Currently when I do redirect 301 "abc" "abc.hml", the second URL is also redirecting to http://example.com/abc.html/def.html.

A diretiva mod_alias Redirect é o prefix matching , o que explica seu redirecionamento indesejável.

Mas também não misture redirecionamentos de mod_alias (por exemplo, RedirectMatch e Redirect ) e mod_rewrite (ou seja, RewriteRule ). Como eles são módulos diferentes, eles são executados em momentos diferentes (geralmente mod_rewrite primeiro), independentemente da ordem aparente, então você pode acabar com conflitos confusos.

Tente o seguinte na configuração do seu servidor, para internamente reescrever /abc to /abc.html

RewriteRule ^/abc$ /abc.html [L]

No entanto, você terá problemas se /abc for um diretório físico no sistema de arquivos, já que mod_dir normalmente tentará "consertar" o URL adicionando uma barra. Então, você precisaria tornar a barra final opcional:

RewriteRule ^/abc/?$ /abc.html [L]

Além disso, desative MultiViews se já estiver ativado:

Options -MultiViews

MultiViews (parte de mod_negotiation) faz o mesmo tipo de coisa (reescreve internamente /abc to /abc.html ou /abc.php ou o que achar) mas executará antes mod_rewrite recebe um chance.

    
por 25.08.2016 / 20:23
0

Isso funcionou para mim. Alguém me ajudou no site com isso.

Options -MultiViews
RewriteEngine On

RewriteRule ^/abc/?$ /abc.html [NC,L,R=302]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L,NC]

RewriteRule ^/(index\.html)?$ /content/aaa-123/abc.html [PT,L,NC]

RewriteCond %{REQUEST_URI} !^/(.*)/$
RewriteCond %{REQUEST_URI} !^(.*)\.(.*)$
RewriteRule ^/(.*)$ /content/$1/ [L]
    
por 25.08.2016 / 21:13