Помощь по переписыванию URL .htaccess! - PullRequest
1 голос
/ 04 декабря 2009

Я использую .htaccess и mod_rewrite в моей маленькой PHP-среде. Он работает хорошо, но я хочу расширить его, просто перенаправив все в index.php.

Моя структура каталогов примерно такая (очевидно упрощенная)

apps
media
system
-- admin
jscript
templates

Мои текущие правила переписывания:

RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Как видите, все «mydomain.com/url» перенаправляется в index.php. Теперь я хотел бы разрешить что-либо «mydomain / admin /» направлять в каталог «admin» внутри папки «system». Я также хочу, чтобы в этой папке были нормальные условия, поэтому вместо использования чистых пользователей я бы использовал URL-адреса, например 'mydomain.com/admin/some-kind-of-file.php'.

Короче говоря, я просто хочу, чтобы мое условие перезаписи применялось ко всему, кроме папки system / admin.

Возможно ли это? Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

2 голосов
/ 04 декабря 2009

Просто добавьте admin к вашему условию и используйте дополнительное правило для его перенаправления:

RewriteCond $1 !^(index\.php|media|jscript|admin)/
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^admin/.* system/$0 [L]
1 голос
/ 04 декабря 2009

Похоже, что следующее применяет RewriteRule, только если URL не начинается с site.com/index.php, site.com/media или site.com/jscript.


RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Я буду честен, я не видел $1, использовавшегося в RewriteCond до сих пор, но кажется интересным.

Так что, если ваш URL site.com/admin...? Ну, вам нужен новый RewriteRule. Также вам нужно предотвратить перенаправление URL-адресов, начинающихся с admin, первым RewriteRule.


RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript|admin|system)
RewriteRule ^/?(.*)$ index.php/$1 [L,R]

RewriteRule ^/?(admin.*)$ system/$1 [L,R]

Обновление 1 : добавлено system в список URL, которые не должны применяться к первому RewriteRule.

Обновление 2 : удаление [L,QSA] из первого RewriteRule и замена на [L,R].

1 голос
/ 04 декабря 2009

Сначала перенаправьте людей, направляющихся в папку администратора, а затем отфильтруйте остальные, например:

RewriteRule ^admin/([^/]*)$ system/$1 [L,QSA]

RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
1 голос
/ 04 декабря 2009

Кажется, что ваши папки 'media' и 'jscript' уже освобождены от правила перезаписи, не могли бы вы просто добавить папку 'admin'? например:

RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript|admin)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Если вы действительно хотите перенаправить все из / admin в / system / admin (который также обновит URL в браузере пользователя), вы должны использовать правило mod_alias, например:

RedirectMatch permanent ^/admin/(.*)$ http://mysite.com/system/admin/$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...