Intereting Posts
Есть ли способ получить название категории в нижнем регистре? используя ЗАПОМНЕННЫЕ ПРОЦЕДУРЫ: разные результаты в mysqli-> query («CALL select_procedure») VS mysqli-> query («SELECT …») Сессия PHP потеряна после перенаправления Получить только имя файла из url в php без каких-либо значений переменных, которые существуют в URL-адресе PHP некоторые значения $ _POST отсутствуют, но присутствуют в php: // input Как взорвать многострочную строку? Предупреждение PHP: array_shift () ожидает, что параметр 1 будет массивом, null указан в /home5/…/php/symfony/command/sfCommandManager.class.php Как я могу проверить, установлен ли PEAR на моем сервере или нет? Кэширование запросов в MySQL PHP: Требовать, чтобы путь не работал для работы cron? Как использовать DIRECTORY_SEPARATOR для Windows PHP перенаправляет и загружает контент с помощью jQuery / AJAX PHP float / double хранится как MySQL DECIMAL PHP не может загружать динамическую библиотеку (mongo.so) Сценарий GoogleCloudMessaging PHP всегда возвращает неверную регистрацию

RewriteRule htaccess всегда удаляет конечную директорию с косой чертой

Цель состоит в том, чтобы объединить несколько правил:

  • никогда не иметь конечной косой черты в URI
  • внутренне переписывать index.php (domain.tld / somedir / index.php) при вызове domain.tld / somedir
  • удалите расширения файлов , проверьте, существует ли + '.php' и, в конечном счете, внутренне переписывается на него

Это должно быть сделано в .htaccess, так как это доступно мне только.

Моя попытка до сих пор

# check if *.php exists RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*[^/])/?$ $1.php [L, QSA] # do not allow trailing slash RewriteRule (.*)/ $1 [L, R=301] 

Трудность здесь заключается в том, что запрос domain.tld / somedir обычно вызывает индекс index.php каталога после перенаправления на 'domain.tld / somedir /'. Тем не менее, я хотел бы, чтобы index.php был внутренне вызван (нет 301) непосредственно при запросе «domain.tld / somedir».

Вы можете использовать этот код:

 DirectoryIndex index.php RewriteEngine On # remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s] RewriteRule ^(.+?)/$ /$1 [R=301,L] # To internally forward /dir/file to /dir/file.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC] RewriteRule ^(.+?)/?$ /$1.php [L] 

Существует отдельный параметр в apache, называемый DirectorySlash который может быть включен / отключен. Вы можете прочитать больше на httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash, но не забудьте прочитать часть о том, почему это делается прямо внизу, где говорится «некоторые веские причины». Также обратите внимание на проблему безопасности.