Перезапись HTACCESS не работает для не WP каталога - PullRequest
0 голосов
/ 30 ноября 2018

У меня установлен WordPress в корневой папке моего домена example.com, и у меня есть другой каталог с пользовательским кодом PHP example.com/control/.

При отсутствии установки WordPress мой .htaccess файл перенаправлял /control/show.php?id=2как /control/2/ и работает отлично, но как только я установил WP в root, он больше не работает.

ROOT .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
</IfModule>
# END WordPress

/control/.htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^control/([^/]*)$ /control/show.php?id=$1 [L,QSA,NC]

Пожалуйста, помогите мне понять ошибку и как я могу заставить ее работать.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

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 или более цифр).

0 голосов
/ 30 ноября 2018

Вам не нужно создавать элемент управления .htaccess

RewriteRule ^control/([^/]*)$ /control/show.php?id=$1 [L,QSA,NC]

Добавьте приведенный выше код перед # НАЧАТЬ WordPress в wordpress htaccessфайл.

Надеюсь, что это может помочь.

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