htaccess RewriteRule не запускается

#php #apache #.htaccess #mod-rewrite

#php #apache #.htaccess #мод-перезапись

Вопрос:

Моя структура каталогов

 domain.com/project1
domain.com/project1/,htaccess
domain.com/project1/api.php
  

.htaccess является

 RewriteEngine On    
RewriteRule /([^.] )/([^.] ).(xml|json) /api.php?version=$1amp;url=$2amp;type=$3
  

Итак, перейдем к domain.com/project1/v1/users.json должен направить меня к domain.com/project1/api.php?version=v1amp;url=usersamp;type=json но я получаю 404 высказывания

 The requested URL /project1/v1/users.json was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
  

Комментарии:

1. Что такое корень документа?

2. Попробуйте удалить / перед /api.php?...

3. Удаление / не исправило это. Что вы имеете в виду корень документа?

4. Работает ли ваш другой код .htaccess?

Ответ №1:

Это правило должно работать с /project1/.htaccess :

 RewriteEngine On
RewriteBase /project1/

RewriteRule ^([w-] )/([w-] ).(xml|json)$ api.php?version=$1amp;url=$2amp;type=$3 [L,QSA]
  
  • Начальная косая черта не соответствует .htaccess
  • Вы должны использовать якоря ^ и $ для получения точного соответствия
  • Экранирование ТОЧКИ в регулярном выражении
  • Хотя это и не обязательно, но полезно использовать QSA флаг (добавление строки запроса).