2012-04-15 4 views
0

Привет apologys, если это где-то, но я не могу найти ответ, который работает с моей настройкой.очистка url с mod rewrite

У меня есть сайт, на котором я хочу удалить имена файлов с URL-адреса, чтобы www.example.co.uk/products/products.php стал www.example.co.uk/products/. Я использовал для слежения, чтобы удалить /index.php с домашней страницы, но я не могу заставить его работать с файлами в папках.

вот рабочий код, который удаляет мой index.php с главной страницы url, как я могу изменить его, чтобы удалить products.php и т. Д. С других моих страниц?

RewriteEngine on 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/ 
RewriteRule ^(([^/]+/)*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L] 

любая помощь оценили

+0

RewriteCond% {THE_REQUEST}^[AZ] {3,9} \/([^ /] + /) * продукты \ .php \ HTTP/ RewriteRule^(([^ /] + /) *) products \ .php $ http: //% {HTTP_HOST}/$ 1 [R = 301, L] у меня есть изменения к вышеперечисленному, теперь я получаю запрещенное сообщение 403 при посещении продуктов на странице –

+0

Revert в код index.php, а затем переименовать products.php в index.php? –

ответ

0

Это правило будет применяться к каждому 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] 
+0

, который работает на домашней странице, но вызывает 403 на любых других страницах, которые находятся в папках, например products.php, на www.example.co.uk/products/products.php. он работает на моем index.php, который находится у корня –

+0

благодарю вас за ваши быстрые ответы, хотя не уверен, почему он не будет работать на страницах, не находящихся у корня –

+0

@Anish Я не могу изменить имена страниц, поскольку я установил свой идентификатор тела чтобы быть динамичным, поэтому я могу ориентировать страницы с помощью css, поэтому изменение имен файлов не является опцией –