2016-04-30 10 views
1

Я использовал следующий код в моем файле .htaccess .:
Подкаталога не перенаправление индекса

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

После использования его, он, наконец, позволил мне удалить расширение файлов, мою цель,
, но затем подкаталоги нет более длинный, перенаправленный в соответствующие индексные файлы, вместо того, чтобы показывать только сообщения «Запрещено» и «404».

Затем я попытался сделать ручной перенаправляет в .htaccess:

Redirect 301 /subfolder http://www.domain.com/subfolder/index 

Который затем получил меня застрял в переадресованных петель, и даже после их удаления в исходном коде, они вели. Я должен также указать, что у меня почти нет опыта использования .htaccess.

ответ

2

Добро пожаловать в прекрасный мир тестирования с постоянными переадресациями: сделайте ошибку и продолжайте делать ошибку, пока не очистите кеш браузера.

Прежде всего, удалите перенаправление и очистите кеш браузера. Во-вторых, представьте, что ваши правила применяются к каждому запросу, а не только к запросам, которые вы хотите изменить.

Проблема, которую вы определили, - это запрос в каталог, соответствующий вашему правилу, а затем переписывание. Запросы на http://domain.com/sub/ будут переписаны до http://domain.com/sub/.php. Теперь это не то, что существует. Единственное, что спасает вас от бесконечной рекурсии, - это проверка точек в URL-адресе.

Итак, как мы это исправим? Ну, мы проверяем, не является ли запрошенный файл не каталогом для начала. Теперь мы не переписываем URL-адрес, если это каталог, а DirectoryIndex заботится обо всем остальном. Чтобы предотвратить бесконечную рекурсию, вы можете проверить, заканчивается ли URL уже .php, но в этом случае вы уже позаботились об этом.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
+0

Большое спасибо, он отлично работал, давая мне больше информации о .htaccess, и причина, по которой удаление правил, казалось, не имело никакого эффекта. Спасибо, что освободил меня. Принято. – Fate

-1

Попробуйте с этим перенаправлением. Он застрял в цикле, потому что 301 является постоянной переадресацией, и он сохраняется в браузере.

RedirectMatch 301 /subfolder(.*) //$1