Правило перенаправления в .htaccess выводит меня не туда

StackOverflow https://stackoverflow.com/questions/282541

Вопрос

У меня проблемы с перенаправлением URL-адресов с помощью файла .htaccess. Вот как выглядит мой файл .htaccess:

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

Теперь проблема в том, что когда я перехожу на страницу: www.my-site.com/file-name/example.php вместо того, чтобы перенаправлять меня на www.my-site .com / file-name / example-001.php он перенаправляет меня на <Код> www.my-site.com/file-name/example.php?file_name=example-001.php .

По какой-то причине он добавляет "? file_name = example-001.php " на URL . Кто-нибудь знает, почему это происходит и как это исправить?

Это было полезно?

Решение

проблема заключается в смешивании правил перенаправления mod_alias с mod_rewrite . решение состоит в том, чтобы придерживаться одного. это решение для подхода только с mod_rewrite (я включил только соответствующие части в проблему):

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]

о том, что происходит в вашем .htaccess, вот журнал переписывания:

(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

который предлагает:

<Ол>
  • apply mod_rewrite " RewriteRule ^ (. +) / (. *) $ hqtemplates ... "
  • имя-файла / example.php теперь эквивалентно hqtemplates / article.php? file_name = example.php
  • применить mod_alias & Redot 301 ... "
  • показать окончательное имя-файла / example-001.php? имя_файла = example.php
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top