Вопрос по codeigniter, regex, .htaccess, query-string, mod-rewrite – CodeIgniter Query String Переписать в .htaccess

2

Когда я впервые запустил свой сайт, URL были в следующем формате:

project.php?projectID=1&pageID=2

Несколько лет назад я изменил свой .htaccess, чтобы переписать их для использования сегментов, например так:

project/1/2

Я обновил все внутренние ссылки, чтобы использовать сегментированный формат, но это было хорошо, потому что он все еще поддерживал любые внешние входящие ссылки в старом формате.

Теперь я переключился на CodeIgniter, так как рендеринг моих страниц в сегментированном формате - это легко, но яЯ пытаюсь понять, как поддерживать старые URL-адреса строки запроса.

Мои попытки поддерживать строки запросов изначально в CodeIgniter, похоже, ломают сегментированные URL-адреса, поэтому, похоже, я не могу поддерживать обе одновременно. Настройка маршрута в CodeIgniter для перенаправления строки запроса в контроллер неКажется, не работает. Например.:

$route['project.php?projectID=(:any)&pageID=(:any)'] = 'home/projectview/$1/$2';

Моей второй мыслью было изменить файл .htaccess напрямую, чтобы перенаправить строку запроса на контроллер, например, так:

(Обратите внимание, что я также использую переписывание .htaccess, которое устраняет появление index.php в URL CI)

RewriteRule ^project.php?projectID=(\d*)&pageID=(\d*) project/$1/$2/ [L]
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php/$1 [L]

Однако это правило перезаписи неПохоже, работать тоже. Он перенаправляет на мой CodeIgniter 404 без перезаписи, и даже удаляя правило index.php по умолчанию, он не 'т перенаправить, поэтому яЯ предполагаю, что в моем regex / .htaccess форматировании есть что-то неправильное.

Ваш Ответ

1   ответ
3

Вы должны соответствовать запросу, а не URI. URI выигралв нем не должно быть ни одной строки запроса:

RewriteCond %{THE_REQUEST} \ /+project\.php\?projectID=([0-9]+)(?:&pageID=([0-9]+)|)
RewriteRule ^ /project/%1/%2? [L,R=301]

RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php/$1 [L]
Удивительно, спасибо и приняли! :) monkeymatrix
Привет @JonLin .. У меня есть немного похожая проблема, вы можете помочь мне с этим ..https://www.jesvenues.com/home/search/?location=Hyderabad&occasion=Anniversary&gathering=100&date=29-Sep-my URL is 2017&timing=Lunch  и я попробовал ваше решение для этого, чтобы получить его какhttps://www.jesvenues.com/search/Hyderabad/Anniversary/100/29-Sep-2017/Lunch.. но это не работает ... не могли бы вы помочь мне с этим .. phpfresher
@monkeymatrix см редактировать Jon Lin
Это прекрасно работает, спасибо, но могу ли я попросить одну ревизию? Я также приспосабливаю '&PageId =» отсутствует (по умолчанию это страница 1). Как сделать эту часть регулярного выражения необязательной? monkeymatrix

Похожие вопросы