Это правило будет применяться к каждому URL, указывающий на PHP файл, отгонкой последнего и выдачи редирект на оставшуюся часть.
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\/[^/]+\.php\ HTTP/
RewriteRule ^(.*)/[^/]+\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
EDIT
@Ashley Бриско: Я думаю, что вы Мессинг вещи здесь немного. Скажем, что начальный URL, запрашиваемый вашим клиентом, - http://www.example.com/products/products.php
. Это правило будет переписано вышеприведенным правилом до http://www.example.com/products/
.
Поскольку теперь переписаны URL указывает на каталог (лидирующий слэш показывает, что), а не файл ресурса, Apache пытается служить directory index file (например, index.html или index.php) в случае mod_dir является (мы можем с уверенностью предположить).
Полученный ответ 403 Forbidden
указывает, что пользователь, на котором работает ваш веб-сервер, НЕ ДОЛЖЕН иметь достаточные привилегии для чтения файла индекса каталога и/или открытия его содержащей папки.
Для этого необходимо убедиться, что на самом деле существует файл индекса каталога (таким образом, переименование products.php
в index.php
в каталог продуктов) и что веб-сервер имеет разрешение на чтение этого файла.
EDIT 2
Что касается вашего последнего комментария: Если переименование не вариант, то вы должны позволить Apache знать, какой файл он должен служить вместо этого. Таким образом, добавить еще одно правило, примерно так:
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\/[^/]+\.php\ HTTP/
RewriteRule ^(.*)/[^/]+\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^products/?$ /products/products.php [L]
RewriteCond% {THE_REQUEST}^[AZ] {3,9} \/([^ /] + /) * продукты \ .php \ HTTP/ RewriteRule^(([^ /] + /) *) products \ .php $ http: //% {HTTP_HOST}/$ 1 [R = 301, L] у меня есть изменения к вышеперечисленному, теперь я получаю запрещенное сообщение 403 при посещении продуктов на странице –
Revert в код index.php, а затем переименовать products.php в index.php? –