htaccess несколько каталогов и GET params - PullRequest
0 голосов
/ 30 августа 2018

Я разрабатываю сайт на PHP и запускаю его локально на моей машине с MAMP для целей тестирования. Прямо сейчас я пытаюсь очистить URL-адреса для внутренней области (admin), чтобы получить такие URL-адреса, как:

localhost/admin/products/read/1

Это мой .htaccess в корне:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [NC]
RewriteRule ^admin/products/read/([0-9]+)/?$ admin/products/read.php?id=$1 [NC]

Я также пытался это RewriteRule, удаляя последнюю строку кода выше:

RewriteRule ^admin/(products|users|companies)/(read|update|delete)/(.*)$ /$1?id=$2 [NC,L]

Структура папок:

htdocs
 - admin
  - products
   - read.php
   - update.php
   - delete.php
   - index.php
  - users
   - ...
  - companies
   - ...
index.php

Chrome и Safari выдают 404, не найденных при попытке URL-адреса, такие как

localhost/admin/products/read/1
localhost/admin/products/read/1/
etc..

Вся помощь приветствуется!

Обновление 31/08/18

С помощью MrWhite я набросал это, исходя из его ответа, чтобы расширить область действия в моем файле .htaccess:

RewriteRule ^admin/(.*)/(.*)/([0-9]+)/?$ admin/$1/$2.php?id=$3 [L]

Что заставило меня задуматься, могу ли я очистить файл конфигурации, просто проверив запрос ID и затем переписав?

1 Ответ

0 голосов
/ 30 августа 2018

Вы получили ваши директивы в неправильном порядке. Вам также не хватает некоторых L флагов. И вам нужно убедиться, что MultiViews не включен.

Попробуйте вместо этого:

Options -MultiViews
RewriteEngine On

RewriteRule ^admin/products/read/([0-9]+)/?$ admin/products/read.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [L]

Если директивы будут наоборот, это добавит расширение .php к URL-пути и никогда не совпадет с вашей второй директивой.

Кроме того, после совпадения директивы вы не хотите, чтобы обработка продолжалась, поэтому вам необходим флаг L (last).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...