2013-04-14 2 views
1

Я хочу использовать один файл .htaccess как для корневой директории, так и для каталогов администратора.Как настроить каталог в mod_rewrite htaccess с несколькими переменными?

При попытке иметь чистые URL-адреса я хочу использовать файл admin/index.php, когда администратор находится в URI. В противном случае используйте корневой каталог index.php.

Это то, что у меня есть, которое отлично подходит для первой переменной (например, localhost/admin/users), однако приводит к 404, если я помещаю вторую переменную (например, localhost/admin/users/add_user).

Пожалуйста, помогите или упростить, я потянув меня за волосы ...

RewriteEngine on 

# Remove trailing '/' 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R,L] 

RewriteRule ^admin/?$ /admin/index.php 
RewriteRule ^admin/([a-zA-Z0-9-]+)/?$ /admin/index.php?controller=$1 [QSA] 
RewriteRule ^admin/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /admin/index.php?controller=$1&method=$2 [QSA] 
RewriteRule ^admin/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /admin/index.php?controller=$1&method=$2&id=$3 [L,QSA] 

RewriteRule ^([a-zA-Z0-9-]+)/?$ /index.php?controller=$1 [QSA] 
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /index.php?controller=$1&method=$2 [QSA] 
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /index.php?controller=$1&method=$2&id=$3 [QSA] 
+1

Код выглядит хорошо. Например, вы пытались изменить порядок правил администратора? Самый длинный верх, кратчайший снизу. –

ответ

0

Причина localhost/admin/users/add_user не работает, потому что вы регулярное выражение для захвата add_user группировка ([a-zA-Z0-9-]+). Обратите внимание, что среди сопоставимых наборов символов _ не является одним из них. Поэтому правило не применяется, поскольку регулярное выражение не совпадает. Вы можете попробовать сделать это гораздо более общий:

RewriteRule ^admin/?$ /admin/index.php 
RewriteRule ^admin/([^/]+)/?$ /admin/index.php?controller=$1 [QSA] 
RewriteRule ^admin/([^/]+)/([^/]+)/?$ /admin/index.php?controller=$1&method=$2 [QSA] 
RewriteRule ^admin/([^/]+)/([^/]+)/([^/]+)/?$ /admin/index.php?controller=$1&method=$2&id=$3 [L,QSA] 

RewriteRule ^([^/]+)/?$ /index.php?controller=$1 [QSA] 
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?controller=$1&method=$2 [QSA] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?controller=$1&method=$2&id=$3 [QSA] 

по существу, заменяя все ([a-zA-Z0-9-]+) с ([^/]+).

+0

Спасибо @ Jon действительно ценю это! Вы указали, что мне не хватает символа '_' в регулярном выражении. Вместо этого я добавил список '_' в список включений - это исправило его. Например. '([A-Za-Z0-9 -_] +)' – mcnamee

Смежные вопросы