Я хочу перенаправить URL-адреса со старого сайта, который использовал необработанные URL-запросы, на мой новый сайт, который я реализовал в CodeIgniter. Я просто хочу перенаправить их на мою страницу индекса. Я также хотел бы избавиться от «index.php» в моих URL, чтобы мои URL были такими же простыми, как example.com/this/that. Итак, это .htaccess
файл, который я создал:
RewriteEngine on
Options FollowSymLinks
RewriteBase /
RewriteCond $1 ^assets
RewriteRule ^(.*)$ example/production/$1
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*)$ index.php? [R=301]
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/$1
Следует также отметить, что мой index.php фактически является символической ссылкой на example/production/index.php
.
Теперь, первое правило работает как положено - все мои стили и изображения отображаются очень хорошо, это вторые два правила, с которыми у меня проблемы. Второе правило заключается в том, чтобы уничтожить строку запроса и перенаправить на мою страницу индекса (внешне). Итак, я нашел это в руководстве Apache:
Примечание: строка запроса
Шаблон не будет сопоставлен со строкой запроса. Вместо этого вы должны использовать RewriteCond с переменной% {QUERY_STRING}. Однако вы можете создавать URL-адреса в строке подстановки, содержащей часть строки запроса. Просто используйте знак вопроса внутри строки замещения, чтобы указать, что следующий текст должен быть повторно введен в строку запроса. Если вы хотите стереть существующую строку запроса, завершите строку подстановки только знаком вопроса. Чтобы объединить новую строку запроса со старой, используйте флаг [QSA].
Однако, когда я пытаюсь получить доступ к одной из старых страниц, вместо перенаправления на мою страницу индекса, я получаю ошибку 404 страница не найдена. Я нашел обходной путь, сделав его внутренним перенаправлением, но мне бы очень хотелось, чтобы он был внешним.
Следующая проблема, которая больше всего меня озадачила, связана с третьим правилом. Я ожидаю, что это сделать что-то вроде следующего. Если я наберу:
http://example.com/this/thing
Я бы ожидал, что он перенаправит на
http://example.com/index.php/this/thing
К сожалению, это не работает. Вместо этого, независимо от того, что я печатаю, он всегда перенаправляет на мою индексную страницу, как будто ничего не было в URL (он просто идет к http://example.com/
).
Более того, и это еще больше сбивает меня с толку, если я заменю это правило следующим:
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/this/thing
Если я введу URL-адрес, такой как http://example.com/other/thing
, то он перейдет к http://example.com/index.php/this/thing
, как и ожидалось, НО, если я наберу http://example.com/this/thing
, он перейдет к http://example.com/
(моя страница индекса). Я не могу сделать из этого головы или хвосты. Любая помощь будет принята с благодарностью.