mod_rewrite: перенаправить запрос в subdir со многими подпапками разных структур + перенаправить в index.php - PullRequest
3 голосов
/ 17 февраля 2012

Мне нужно создать следующее правило для размещения в моем .htaccess

  1. Для каждого запроса я хотел бы выполнить файл / путь в подпапке подпапки.
  2. Если файлтам не существует, тогда я бы хотел перенаправить этот запрос в index.php

Допустим, что .htaccess iw находится в http://domain/folder

Когда пользователь открывает URL http://domain/folder/Subfolder/xxx.html он должен получить файл из http://domain/folder/subdir/Subfolder/xxx.html

Таким образом, эти правила должны учитывать тот факт, что внутри subdir есть подпапки.(Различные структуры подпапок :-) И только если путь в subdir не существует, запрос должен быть перенаправлен в index.php

Поместить справку:)

ps Это дополнительный вопросна мой предыдущий.Это совсем другое и включает в себя тот факт, что внутри subdir есть подпапки.-> mod_rewrite: как выполнить поиск в локальной папке, подпапке, а затем перенаправить на index.php

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Попробуйте добавить следующее в файл .htaccess в каталоге root/folder вашего сайта.

RewriteEngine on
RewriteBase /folder

#capture the Subfolder/file.xx
RewriteCond %{REQUEST_URI} ^/[^/]+/([^/]+)$
#if the subdir/subfolder/file.xx exists
RewriteCond %{DOCUMENT_ROOT}/subdir/%1 -f  
#Serve this file
RewriteRule ^ /subdir/%1 [L,S=1]
#else send to index.php in root directory  
RewriteRule ^  /index.php [L]  

Я предполагаю, что вы хотите отправить запрос на index.php в корневом каталоге.Если оно находится в каталоге папки, измените последнее правило на

RewriteRule ^  index.php [L]  
3 голосов
/ 17 февраля 2012

Почему бы просто не использовать псевдоним:

Alias /folder /subdir

и перенаправить на index.php на своей странице 404?У него есть преимущество, 404 все еще попадает в блог.

2 голосов
/ 17 февраля 2012

Это должно сделать это:

RewriteEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1 -f 
RewriteRule ^ /%1 [NC,L] 

RewriteCond %{DOCUMENT_ROOT}/subdir%{REQUEST_URI} -f
RewriteRule ^ /subdir%{REQUEST_URI} [L]

RewriteRule ^ /index.php [L]

Обновление с небольшой оптимизацией.

RewriteEngine on
#RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^[^/]+\.[^/]+$ - [NC,L]

RewriteCond %{REQUEST_FILENAME} (.*/)([\w]+\.[\w]+)$ [NC]
RewriteCond %1subdir/%2 -f
RewriteRule ^ subdir/%2 [L]

RewriteRule ^ index.php [L]
  • Выше будет работать с любым каталогом / подкаталогом

Журнал изменений:

  • RewriteBase прокомментировал использование относительного пути.

  • Проверка /file.ext (или в текущем каталоге). ниже будет проверяться наличие файла в текущем каталоге.

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^[^/]+\.[^/]+$ - [NC,L]

  • RewriteCond% {DOCUMENT_ROOT} / subdir% {REQUEST_URI} -f

    захватывает текущий каталог в% 1 и файл file.ext в% 2

...