htaccess перезаписывает URL для довольно url, не работающего на локальном хосте Apache - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь применить "красивые" URL-адреса к своему веб-сайту.

, т. Е. localhost/api/?id=15

до

localhost/api/id/15

, вот мой htaccess:

RewriteEngine On
RewriteBase /api/
RewriteRule ^/?id/([^/d]+)/?$ index.php?id=$1 [L,QSA]

Кажется, ничего не работает, но htaccess выглядит нормально.

Нужно ли обновлять конфигурацию apache?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Для URL-адресов, подобных этому

localhost/api/id/15

htaccess может быть таким

RewriteEngine On
RewriteBase /api/
RewriteRule ^id/([0-9]+)$ index.php?id=$1 [L,QSA]

В id=$1 вы получите id=15

0 голосов
/ 17 июня 2018

Этот htaccess выглядит нормально.Модуль переопределения htaccess и apache не был включен.Мне пришлось отредактировать файл /etc/apache2/apache2.conf:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

и изменить его на;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

, затем

sudo a2enmod rewrite

, чтобы включить модуль перезаписи apache.

и, наконец, перезапустите apache, используя sudo service apache2 restart, чтобы увидеть изменения в действии.

0 голосов
/ 13 июня 2018

Как упомянуто в комментариях @Abhishek, вы можете использовать AltoRouter. Нет смысла изобретать велосипед, если он существует и работает хорошо.

require 'AltoRouter.php';
$r = new AltoRouter();
$r->map('/api/id/[i:id]', function($userid) {
    // your logic for what this URL does
    // [i:id] will look for any integers and store it as $userid
}, 'example');
$m = $r->match();
if($m && is_callable($m['target'])):
    call_user_func_array($m['target'], $m['params']);
else:
    header('Location: /404');
    exit();

Документацию вы найдете насайт и пример htaccess.

...