Редактирование файла .htaccess для изменения URL-адреса

Я решил так:

Я использую драйвер PDO.

Метод simple_query возвращает объект PDOStatement и одну важную точку SET NOCOUNT ON

class Pump_Model extends CI_Model
{
    public function getPumpStatisticSpById($pumpId)
    {
        $result = $this->db->simple_query("SET NOCOUNT ON 
                            DECLARE @return_value int
                            EXEC    @return_value = [dbo].[spPumpStatistics]
                                    @PumpID = $pumpId")->fetch(PDO::FETCH_OBJ);
        return $result;
    }

}
0
задан Marwan Ansari 14 July 2018 в 02:19
поделиться

2 ответа

Вы можете использовать:

RewriteEngine on

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/+FOLDER/index\.php\?id=(\d+) [NC]
RewriteRule ^ /FOLDER/%1? [R=301,L,NE]

# internal forward from pretty URL to actual one
RewriteRule ^FOLDER/(\d+)/?$ FOLDER/index.php?id=$1 [L,QSA,NC]
0
ответ дан Croises 17 August 2018 в 12:02
поделиться
  • 1
    Не работает :( Когда я пытаюсь перейти к FOLDER/5, он показывает мне сообщение Not Found. Не уверен, что случилось. Я скопировал ваш ответ, и мой .htaccess находится в корне сайта. работая на localhost, если это проблема? – Marwan Ansari 15 July 2018 в 01:37
  • 2
    Эй, мужчина, просто давая тебе знать, но это сработало! Я не знаю, что было раньше, но теперь все работает отлично. Большое спасибо! – Marwan Ansari 22 July 2018 в 14:05
  • 3

Первый аргумент RewriteRule - это то, к чему будет присоединяться входящий URL без домена и без предшествующих путей (подробнее об этом позже). Этот URL-адрес в вашем случае http://mywebsite.com/FOLDER/5. Предполагая, что ваш файл .htaccess находится в вашем DocumentRoot, регулярное выражение будет соответствовать FOLDER/5.

В настоящее время вы пытаетесь сопоставить FOLDER/5 с ^index/([0-9]+)/([0-9a-zA-Z_-]+), который не будет работать. Лучшим регулярным выражением будет ^(.*)/([0-9]+)$ или ^(.*)/ID/([0-9]+)$. Затем вы можете переписать на $1/index.php?id=$2. Я бы рекомендовал использовать флаг [L], чтобы остановить переписывание для этого раунда, чтобы избежать общих проблем с несколькими правилами, которые вы не ожидаете.


Кроме этого, убедитесь, что ваш .htaccess (например, проверяя, что если вы введете мусор, вы получите ошибку внутреннего сервера 500), что mod_rewrite включен, что вы можете переопределить FileInfo. Вам также может потребоваться отключить AcceptPathInfo.

0
ответ дан Sumurai8 17 August 2018 в 12:02
поделиться
  • 1
    Мой файл .htaccess читается, и я попробовал ваш метод. Обновленный RewriteRule теперь выглядит как RewriteRule ^(.*)/ID/([0-9]+)$ $1/index.php?id=$2 [L]. Все еще не работает. Любая идея почему? – Marwan Ansari 15 July 2018 в 01:53
  • 2
    Мне понадобилось бы больше информации для этого. Вы проработали последний абзац? Что вы узнали? – Sumurai8 15 July 2018 в 08:27
  • 3
    Привет, спасибо за помощь, но я понял это сейчас. Спасибо за ответ! – Marwan Ansari 22 July 2018 в 14:06
Другие вопросы по тегам:

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