.htaccess в корне и подпапках, каждый для перенаправления на собственный index.php - PullRequest
8 голосов
/ 23 мая 2011

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

У меня следующая структура каталогов:

/.htaccess
/index.php
/subfolder/.htaccess
/subfolder/index.php

Я бы хотел, чтобы все запросы на страницы обрабатывались /index.php, если только запрос не начинается /subfolder, и в этом случае он должен обрабатываться /subfolder/index.php

  • например /abc переписать в /index.php?u=abc
  • например /subfolder/def переписать в /subfolder/index.php?u=def

Я обошел это кругами, поэтомулюбая помощь будет высоко ценится.

РЕДАКТИРОВАТЬ: забыл упомянуть проблему!Запросы в подпапке обрабатываются корнем index.php, а не подпапкой.(Кроме запросов на /subfolder)

Текущее содержимое файла

/.htaccess
Options -Indexes -MultiViews +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)$ /index.php?u=$1 [NC,QSA]
/subfolder/.htaccess
RewriteBase /admin/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /admin/index.php?u=$1 [NC,QSA]

Ответы [ 2 ]

11 голосов
/ 23 мая 2011

Ваш корневой .htaccess выглядит так:

Options -Indexes -MultiViews +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?!admin/)(.+)$ /index.php?u=$1 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.+)$ /admin/index.php?u=$1 [NC,QSA,L]

Для этого простого требования не нужно иметь .htaccess в папке администратора.

1 голос
/ 23 мая 2011

Эта строка корневой папки .htaccess:

RewriteRule ^(.*)$ /index.php?u=$1 [NC,QSA]

приводит к тому, что все запросы к несуществующим файловым путям перенаправляются в корневую папку index.php.Это проблема.Одним из возможных решений может быть замена вышеуказанной строки на эту пару строк:

RewriteRule ^subfolder/(.*)$ /subfolder/index.php?u=$1 [L,NC,QSA]
RewriteRule ^(.+)$ /index.php?u=$1 [L,NC,QSA]

Добавив флаг L (последний) и написав правила в этом порядке, вы получите Apache для правильного перенаправленияваши запросы, и избавьте от необходимости переписывать директивы в /subfolder/.htaccess.

...