regra de redirecionamento no .htaccess está me levando para o lugar errado
-
08-07-2019 - |
Pergunta
Estou tendo problemas com o redirecionamento de URLs usando o arquivo .htaccess. Isto é o que meus olhares de arquivo .htaccess como:
Redirect 301 /file-name/example.php http://www.mysite.com/file-name/example-001.php
Redirect 301 /section-name/example.php http://www.my-site.com/section-name/example-002.php
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mysite.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.*)$ hqtemplates/articles.php?file_name=$2 [L]
php_value session.use_only_cookies 1
php_value session.use_trans_sid 0
Agora o problema é que quando eu ir para a página: www.my-site.com/file-name/example.php
, em vez de me redirecionando para www.my-site.com/file-name/example-001.php
ele me redireciona para
www.my-site.com/file-name/example.php?file_name=example-001.php
.
Por alguma razão ele adiciona "? File_name = example-001.php" para a url . Alguém sabe por que isso está acontecendo e como corrigi-lo?
Solução
o problema é misturar mod_alias
redirecionamento governa com mod_rewrite
. a solução é manter um. esta é uma solução para um mod_rewrite pura única aproximar (i ter incluído apenas partes relevantes para o problema):
RewriteEngine on
# emulate specific mod_alias Redirect rules
#
# Flags explanation:
# [L] = last rule, stop processing further rules
# [R=301] = 301 Redirect
#
RewriteRule ^file-name/example.php$ http://www.mysite.com/file-name/example-001.php [L,R=301]
RewriteRule ^section-name/example.php$ http://www.my-site.com/section-name/example-002.php [L,R=301]
# handle other rewrite requests
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.*)$ hqtemplates/articles.php?file_name=$2 [L]
quanto ao que está acontecendo em seu .htaccess, aqui está o log de reescrita:
(2) rewrite 'file-name/example.php' -> \
'hqtemplates/articles.php?file_name=example.php'
(2) strip document_root prefix: /home/test/hqtemplates/articles.php -> \
/hqtemplates/articles.php
(1) internal redirect with /hqtemplates/articles.php [INTERNAL REDIRECT]
(1) pass through /home/test/Sites/file-name/example-001.php
o que sugere:
- se candidatar
mod_rewrite
"RewriteRule ^ (. +) / (. *) $ Hqtemplates ..." -
file-name/example.php
é agora equivalente ahqtemplates/articles.php?file_name=example.php
- se candidatar
mod_alias
"Redirect 301 ..." - mostrar
file-name/example-001.php?file_name=example.php
final