mod_rewrite: как искать в локальной папке, подпапке, а затем перенаправлять в index.php - PullRequest
1 голос
/ 17 февраля 2012

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

  1. Во-первых, я хочу завершить файл в главной папке (/) (если запрошенный файл существует)
  2. Во-вторыхЯ хотел бы найти этот файл в подпапке -> / subfolder
  3. И, если файл не существует в пунктах 1 и 2, id хотел бы перенаправить запрос, сделайте /index.php

Какой лучший способ сделать это.

Спасибо за помощь:)

ps Первый пункт можно было бы исключить как более простое решение.Поэтому, если пользователь введет url /file.jpeg, сервер найдет этот файл в / подпапке, и если не найдет этот файл, он перенаправит запрос на выполнение index.php

Ответы [ 2 ]

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

Это просто дополнение к подходу, описанному ThinkingMonkey. Как я уже говорил, переменные% доступны только в условии или правиле next . Однако переменные правила $ доступны как для conds, так и для строки замены правила, поэтому правило 2 должно быть записано как (с теми же предостережениями при использовании DOCUMENT_ROOT ):

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

или если вы хотите сделать наоборот

RewriteCond %{DOCUMENT_ROOT}/subdir/$1 -f 
RewriteRule (\w+\.\w+)$ subdir/$1 [NC,L] 
1 голос
/ 17 февраля 2012

Я предполагаю, что ваш URL выглядит следующим образом: somesite.com/subfolder/file.extension. Если URL отличается, укажите подробности. Добавьте это к вашему .htaccess в вашем DocumentRoot.

Options +FollowSymLinks -MultiViews -Indexes

RewriteEngine on
RewriteBase /

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

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

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^ /index.php [L]

Изменено в соответствии с требованием ОП.

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 %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC]
RewriteCond %{DOCUMENT_ROOT}/subdir/%1 -f
RewriteRule ^ /subdir/%1 [L]

RewriteRule ^ /index.php [L]
...