#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 и первый сегмент) работает?