Сопоставьте файлы из подкаталога в корневую папку через .htaccess

#.htaccess #mod-rewrite #apache2

#.htaccess #переписать мод #apache2

Вопрос:

У меня большое количество файлов в подкаталоге. Я хотел бы сопоставить эти файлы с корневым каталогом, чтобы запрос на «http://www.mysite.com/filename » на самом деле указывает на «http://www.mysite.com/subfolder/filename.php » на сервере. Я хотел бы удалить ссылку на подпапку.

Обратите внимание, что я также хотел бы добавить суффикс «php» в файл htaccess. У меня также есть относительно большое количество файлов в корневом каталоге (включая About, Contact и т. Д.) И Пару других папок, Поэтому перезапись базы не является жизнеспособным вариантом.

В идеале, для каждого запроса я бы проверял, существует ли файл в корневой папке, и если нет, то сопоставьте с подпапкой. Я попробовал следующее, но не смог сопоставить файл с подпапкой, не говоря уже о том, чтобы сначала проверить, существует ли он.

 RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
# works fine if not commented:
# RewriteRule ^(.*)$ $1.php
# try pointing to subfolder instead does not work
RewriteRule ^(.*)$ folder/$1.php
 

Спасибо за любой совет. План Б — просто оставить имя папки в URL, но я был бы рад найти более элегантное решение и более короткий и прямой URL.

Ответ №1:

2-е условие перезаписи не сработает, потому что вы не смотрите внутрь «папки», попробуйте что-то вроде этого:

 RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ folder/$1.php
 

Если корень вашего документа был чем-то вроде /htdocs , тогда вы проверяли /htdocs/filename.php , существует ли файл, когда я думаю, что вы хотите проверить, /htdocs/folder/filename.php существует ли он.