Итак, у меня есть довольно типичная конфигурация «единой точки входа» в файле .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
И она отлично работает.Теперь - я тоже какое то поведение по запросу к самому файлу index.php.Итак, я делаю это:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
#file must not exist:
RewriteCond %{REQUEST_FILENAME} !-f [or]
# *unless* this is the index.php *itself*, then I also
#want to pass it to itself.
RewriteCond %{REQUEST_FILENAME} index.php
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Таким образом, у нас есть своего рода исключение - продолжайте, когда файл не существует, но и когда он существует, но это «index.php».
И это работает, но, к сожалению, это также работает для файлов с более глубокой структурой.То, что я хочу, это поймать только то, что «index.php» находится на том же уровне, что и сам .htaccess.
Обновление: Может быть, я должен уточнить.Я хочу создать очень общую, единую точку входа для php, например, такую:
https://github.com/kpion/point1
Это «работает», но я чувствую, что должен это сделатьнемного по другому.Я уже задавал подобный вопрос ( Отличный способ заставить единственную точку входа (фронт-контроллер) работать с наиболее распространенными настройками веб-сервера ), но он был расценен как «слишком длинный», так что это мой второй подход:)
Пожалуйста, имейте в виду, что я не могу использовать ^ / index.php - в условии, потому что 'request uri действительно не нужно начинать с него.Этот htaccess также может быть глубже , то есть глубже в корне документа.На самом деле это довольно часто, когда у меня много небольших проектов в / var / www / html, и я не хочу создавать vhost для всего.Таким образом, «root» - это / var / www / html, а теперь:
Пример:
Проект находится в / var / www / html / point / point1
.Htaccess находится внутри него.Он перенаправляет все запросы к несуществующим файлам в index.php.С моими несколькими дополнительными строками он также перенаправляет себя в index.php.
Примечание :% {REQUEST_URI} в этом случае, когда мы открываем / var / www / html / point /point1 равно "/point/point1/index.php"
Это не /index.php
Работает нормально, когда я звоню http://localhost/point/point1/.local/noExistinFile или http://localhost:82/point/point1/ (это будет указывать на index.php, который будет соответствовать моему последнему RewriteCond).
Но, когда у меня есть файл, расположенный в / var / www / html /point / point1 / .local / index.php и я вызываю http://localhost2/point/point1/.local/index.php - я не хочу, чтобы это прошло условия, и я не хочу, чтобы он был перенаправлен в index.php.
Так что мне нужно что-то относительно в местоположении .htaccess.