У одному з моїх проектів я намагаюся перенаправити за допомогою .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]