/ / .htaccess перенаправлення за винятком - .htaccess, перенаправлення

.htaccess перенаправлення за винятком - .htaccess, перенаправлення

У одному з моїх проектів я намагаюся перенаправити за допомогою .htaccess.Я використовую перенаправлення таким чином:

RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

Але тепер я хотів би додати виключення з правил перезапису. Я хочу http://example.com/admin/ для перенаправлення таким же чином, тільки в інший каталог. Весь інший трафік повинен йти до загальнодоступного каталогу. Так що я додав умова переписування, як це:

RewriteCond %{REQUEST_URI} !/admin/
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

Це не вдалося зробити. Я все ще переадресовується на загальнодоступну папку. Я теж пробував це:

RewriteRule ^admin$ admin/ [L]
RewriteRule admin(.*) admin/$1 [L]

RewriteCond %{REQUEST_URI} !/admin
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

Це тільки погіршувало ситуацію. Зараз я отримую 500 внутрішніх помилок сервера.

Я шукав години зараз, і я "мтрохи втомившись від пошуку прикладів, які показують, як додати виключення для певної папки, але не показувати, як переспрямувати цей трафік на іншу папку. Чи можете ви сказати мені, що я роблю неправильно, чи який інший підхід я міг би спробуй?

Відповіді:

5 за відповідь № 1

А. RewriteCond стосується лише правило прямо під ним. Іншими словами, у вашому прикладі він застосовується лише до правила порожнього шляху. Перемістіть RewriteCond вниз один паз, і він буде працювати краще.

RewriteRule ^$ public/ [L]

RewriteCond %{REQUEST_URI} !/admin/
RewriteRule (.*) public/$1 [L]

Крім того, я знайшов ваше правило

RewriteRule admin(.*) admin/$1 [L]

бути непарним URL-адреса, як /adminsomething буде переписано до /admin/something що я не думаю, це те, що ви хочете.

Крім того, у мене виникла думка, що ви заплутали переписати з перенаправити. Перезаписати правило, яке робить запит бутипереписаний всередині і інтерпретований по-різному. Переспрямування - це правило, яке повідомить браузеру відвідувача про іншу адресу. Який з них ви збираєтеся?

Магічне ключове слово для a перенаправити є R=301 що означає переадресацію за допомогою http-коду 301 Переміщено назавжди. Наприклад, ви можете спробувати ...

# This first rule is actually redundant in this case so skip it...
#RewriteRule ^$ public/ [R=301,L]
RewriteCond %{REQUEST_URI} !/admin
RewriteRule (.*) public/$1 [R=301,L]