Я использовал следующий код в моем файле .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
После его использования он наконец-то позволил мне удалить расширения файлов, моя цель,
но тогда подкаталоги больше не перенаправляются в соответствующие им индексные файлы,
вместо этого отображаются только сообщения «Запрещено» и «404».
Затем я попытался сделать ручные перенаправления в .htaccess:
Redirect 301 /subfolder http://www.domain.com/subfolder/index
После чего я застрял в циклах перенаправления, и даже после удаления их из исходного кода они продолжили. Я также должен отметить, что у меня почти нет опыта использования .htaccess.
Добро пожаловать в удивительный мир тестирования с постоянными перенаправлениями: сделайте ошибку, и она будет повторяться до тех пор, пока вы не очистите кеш браузера.
Прежде всего, удалите перенаправление и очистите кеш вашего браузера. Во-вторых, представьте, что ваши правила применяются к каждому запросу, а не только к запросам, которые вы хотите изменить.
Проблемой, которую вы обнаружили, был запрос к каталогу, соответствующему вашему правилу, а затем переписывание. Запросы к 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]
Попробуйте с этим перенаправлением. Он застрял в цикле, потому что 301 — это постоянное перенаправление, и он сохраняется в браузере.
RedirectMatch 301 /subfolder(.*) //$1