Недавно я получил некоторую помощь в модификации моего файла .htaccess, чтобы скрыть расширение .php в URL-адресе. После того, как я начал работать, на моем сайте появилось несколько ошибок. По какой-либо причине любая php-страница в подкаталоге возвращает ошибку 404. Например:
mywebsite.com/test/test.php (это 404-е)
но
mywebsite.com/test/test.html (это работает просто отлично)
Поскольку это только началось после моего файла .htaccess, я предполагаю, что проблема там лежит. Файл содержит следующее:
RewriteEngine On # Unless directory, remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/$ http://www.mywebsite.com/$1 [R=301,L] # Redirect external .php requests to extensionless url RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{THE_REQUEST} /.+?\.php [NC] RewriteRule ^(.+?)\.php$ /$1 [R=301,L,NE] # Resolve .php file for extensionless php urls RewriteRule ^([^/.]+)$ $1.php [L] ErrorDocument 404 /404.php DirectoryIndex index.php
Если есть какая-либо дополнительная информация, которую я могу предоставить, чтобы помочь решить эту проблему, пожалуйста, дайте мне знать!
Спасибо вам за помощь.
Попробуйте эти правила в корневом каталоге .htaccess:
ErrorDocument 404 /404.php DirectoryIndex index.php RewriteEngine On RewriteBase / # Unless directory, remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/$ /$1 [R=301,L,NE] # Redirect external .php requests to extensionless url RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{THE_REQUEST} /.+?\.php [NC] RewriteRule ^(.+?)\.php$ /$1 [R=301,L,NE] # Resolve .php file for extensionless php urls RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC] RewriteRule ^(.+?)/?$ $1.php [L]
Если вы хотите скрыть свою структуру проекта PHP, доступ к которой будет публиковаться как дерево каталогов … вам следует рассмотреть возможность добавления файла .htaccess в корень вашего проекта только с одной строкой
Добавьте следующую строку в ваш файл .htaccess.
Options -Indexes