Почему URL-адрес, в котором index.php работает ли префикс с первым сегментом в codeigniter | Codeigniter | RewriteCond

#php #codeigniter #mod-rewrite

#php #codeigniter #мод-перезапись

Вопрос:

Я работаю над проектом CodeIgniter, и сегодня я обнаружил очень странную проблему.

Когда я открываю URL-адрес с префиксом index.php в первом сегменте, он все еще работает, хотя я ожидаю, что URL вернет 404 Not Found страницу.

Например, URL-адрес моего веб-сайта http://localhost/project , и когда я открываю URL http://localhost/project/jobs -адрес, он работает нормально, но когда я открываю http://localhost/project/index.phpjobs его, он также работает.

Я не знаю, что здесь происходит!

Пожалуйста, обратите внимание, что URL-адрес не содержит косой черты, но все еще работает, и это не опечатка.

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

.htaccess

 RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin(.*)$ admin/index.php?/$1 [L]

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

RewriteRule ^.well-known/ - [L,NC]
  

Ответ №1:

Ваше первое правило перезаписи

 RewriteRule ^admin(.*)$ admin/index.php?/$1 [L]
  

будет соблюден, только если будут выполнены предыдущие два условия

 RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
  

были выполнены.

Теперь хитрость заключается в этих условиях, которые в основном говорят, что перезапись будет выполнена только в том случае, если запрошенный ресурс ( REQUEST_FILENAME здесь ) не существует ни в виде файла, ни в виде папки.

Поскольку index.php , очевидно, существует, правило перезаписи пропускается, и сервер фактически получает исходный (не перезаписанный) запрос.

Именно по этой причине вы видите один и тот же результат для запросов, которые как содержат, так и не содержат /index.php/ в качестве префикса.

То же самое относится к обоим наборам перезаписи, тем, которые вы используете для своей страницы администратора, и обычным.

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

1. Привет, чувак, ты заметил, что мой вопрос о том, почему первый сегмент с префиксом index.php (без косой черты между index.php и первый сегмент) работает?