htaccess убираем php ошибка одинаковых имен папок и файлов

301
30 июня 2017, 08:24

Здравствуйте, как все знают чтобы убрать у названия файла его расширение надо в htaccess ввести следующее

# Запускаем движок замены
RewriteEngine on
 # Если запрашиваемый объект не папка
RewriteCond %{REQUEST_FILENAME} !-d
 # если запрашиваемый объект с дописанным расширением php - файл
RewriteCond %{REQUEST_FILENAME}\.php -f
 # делаем замену с дописыванием .php
RewriteRule ^(.*)$ $1.php

Я столкнулся со следующей проблемой, все работает отлично если не одно но, если у вас на одном уровне имеется файл например ru.php и папка ru то при обращении например к файлу site.com/ru меня переводит не на ru.php а на автомате перекидывает в папку site.com/ru/

Кто знает как решить этот вопрос?

По скрипту: (переименовать папку или файл это не решение вопроса, а уход от проблемы которую хотелось бы решить).

Answer 1

Проверил информацию, полученную от @Visman. Действительно Apache дописывает слеш если есть директория, но тут дело в модуле mod_dir и директиве DirectorySlash. По-умолчанию значение директивы on и Apache возвращает ответ 301 с URL который оканчивается на слеш.

Решение вашей проблемы такое:

# запускаем движок замены
RewriteEngine on
# если запрашиваемый объект с дописанным расширением php - файл
RewriteCond %{REQUEST_FILENAME}\.php -f
# делаем замену с дописыванием .php
RewriteRule ^(.*)$ $1.php
# отключаем редирект для директорий без слеша
<IfModule mod_dir.c>
    DirectorySlash off
</IfModule>

См. также

  • Описание директивы DirectorySlash (на английском)
READ ALSO
Как отправить запрос методом POST на адрес ROOT URL?

Как отправить запрос методом POST на адрес ROOT URL?

Как отправить POST запрос следующего вида:

316
Изменения в php-файлах не видны без перезагрузки apache

Изменения в php-файлах не видны без перезагрузки apache

здравствуйте, я установил на свой сервер OPcache (использую связку apache+nginx), после установки, добавил в конфиг пару строк (я взял их из рекомендаций...

339
Как в Phalcon реализовать коннект двух БД, чтоб при записи коннект был к одной, а при чтении к другой

Как в Phalcon реализовать коннект двух БД, чтоб при записи коннект был к одной, а при чтении к другой

Да, при работе с моделями можно использовать $this->setReadConnectionService('dbSlave') и $this->setWriteConnectionService('dbMaster'), но сложность возникает когда запросы идут...

200
Перемешивание блоков с данными из БД при каждом обновлении страницы

Перемешивание блоков с данными из БД при каждом обновлении страницы

Помогите, пожалуйста, сделать рандомное перемешивание блоков с данными из БД при каждом обновлении страницы

257