control/.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^control/([^/]*)$ /control/show.php?id=$1 [L,QSA,NC]
Это не работает в файле /control/.htaccess
, поскольку директива RewriteRule
записывается так, как если бы она находилась в файле .htaccess
в корне документа.
В .htaccess
шаблон RewriteRule
соответствует URL-пути без префикса каталога (который приводит к файлу .htaccess
).Другими словами, это соответствует 2/
, а не control/2/
.Вот почему указанная выше директива не работает.
Не ошибка, но вам не нужно явно указывать подкаталог /control/
в подстановке , так как это будетиметь префикс автоматически, если вы используете подстановку относительного пути.Кроме того, вам также не нужна директива RewriteBase
(возможно, она в любом случае установлена неправильно в этом контексте).
Итак, вышеприведенное должно быть написано следующим образом:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ show.php?id=$1 [QSA,L]
В этом примере флаг NC
также является излишним.
Вы должны быть как можно более конкретны в своем регулярном выражении.Если «id» всегда равен цифр (как в вашем примере), измените шаблон RewriteRule
, чтобы он соответствовал только цифрам: ^(\d*)$
(0 или более цифр).