В моем файле .htaccess всякий раз, когда я создаю перенаправление 301, URL-адрес, с которого нужно перенаправить, добавляется к URL-адресу, на который нужно перенаправить. Например:
Redirect /linksresources.html http://example.com/resources/
Перенаправит меня на:
http://example.com/resources/?/linksresources.html
Существующий файл .htaccess:
#404 Custom Error page
#ErrorDocument 404 /error_docs/404.php
#force IE out of compatibility mode
<FilesMatch "\.(htm|html|php)$">
<IfModule mod_headers.c>
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1"
</IfModule>
</FilesMatch>
#Disable Indexing
Options -Indexes
Order Deny,Allow
Allow from All
Redirect /linksresources.html http://example.com/resources/
RewriteEngine On
RewriteOptions inherit
#if request is not an existing file or directory then redirect to
#codeigniter boot.php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ boot.php?/$1 [L,QSA]
Мне кажется, что я уже решал эту проблему в прошлом, но я не могу вспомнить, что именно я сделал. У кого-нибудь есть предложения?
Это результат конфликта с вашими директивами mod_rewrite, которые выполняют перед mod_alias Redirect
директиву, несмотря на очевидный порядок в вашем файле конфигурации. Во время запроса разные модули выполняются в разное время. По этой причине не рекомендуется смешивать редиректы от обоих модулей.
В частности, существующие RewriteRule
срабатывает, поскольку предположительно /linksresource.html
не существует как физический файл и внутренне переписывается на boot.php?/linksresource.html
. Mod_alias Redirect
затем срабатывает, соответствует /linksresource.html
против исходный запрос и перенаправляет на http://example.com/resources/?/linksresources.html
- передача строки запроса из перезаписанного запроса.
Поскольку вы уже используете mod_rewrite, вам следует изменить mod_alias Redirect
эквивалентному mod_rewrite RewriteRule
:
RewriteRule ^linksresources\.html$ http://example.com/resources/ [R=302,L]