Два правила переписывания модов - PullRequest
2 голосов
/ 14 июня 2009

Мне нужны два условных правила. Справочная информация:

http://www.domain.com/.htaccess
http://www.domain.com/index.php
http://www.domain.com/admin/index.php

У меня есть оба правила переписывания:

ROOT:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1.php?%1 [L]

ADMIN:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+?)/([a-z]+?)/(.*)$ index.php?model=$1&view=$2&params=$3 [L,NS]

Мне нужно, чтобы каким-то образом только один файл .htaccess на корневом уровне использовал оба правила, но правила ADMIN применяются только тогда, когда url <a href="http://www.domain.com/admin/foo/bar/something/else" rel="nofollow noreferrer">http://www.domain.com/admin/foo/bar/something/else</a> и правило ROOT применяется к <a href="http://www.domain.com/foo/bar/something/else" rel="nofollow noreferrer">http://www.domain.com/foo/bar/something/else</a>.

Заранее спасибо, я убил целый день, пытаясь это сделать, и когда один работает, другой выдает мне ошибку «Не найдено».

Kris

Ответы [ 2 ]

2 голосов
/ 14 июня 2009
RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^([^/]+)/ $1.php?%1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/([a-z]+?)/([a-z]+?)/(.*)$ /admin/index.php?model=$1&view=$2&params=$3 [L,NS]
1 голос
/ 15 июня 2009

Я бы использовал это:

RewriteEngine On

# /admin/ rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/([a-z]+)/([a-z]+)/(.*)$ admin/index.php?model=$1&view=$2&params=$3 [L,NS]
RewriteRule ^admin/ - [L]

# other rules
RewriteRule ^(.*/)([^/]+)/([^/]+)$ $1?$2=$3 [L,QSA]
RewriteRule ^([^/]+)/ $1.php [L,QSA]

Флаг QSA ( строка запроса добавляет ) заменяет директивы RewriteCond %{QUERY_STRING} (.*).

...