Я, наверное, совершенно не прав:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule .* index.php [L]
#Rewrites so it looks like production
RewriteCond %{REQUEST_URI} !^/Home/
RewriteRule ^(.*)$ /Home/$1 [L]
Может ли кто-нибудь настроить меня, чтобы сделать все URL-адреса http: // site / somepage1 , http: // сайт / somepage2, можно переписать как http: // сайт / Главная / somepage1, http: // сайт / Главная / somepage2. Есть ли одно правило, которое захватило бы все эти URL-адреса и добавило бы «/ Home» ко всем URL-адресам?
Заранее спасибо.
Обновить
При входе в httpd.conf и установке LogLevel = debug выяснилось, что эти два правила конфликтуют:
[Fri Sep 23 10:54:07 2011] [debug] core.c(3065): [client 127.0.0.1] r->uri = /Home/index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /Home/index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /Home/index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /Home/index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /Home/index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /index.php
[Fri Sep 23 10:54:07 2011] [debug] core.c(3071): [client 127.0.0.1] redirected from r->uri = /Home
Есть ли способ объединить эти два правила перезаписи без этой ошибки перенаправления?
Вот так просто:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/Home/
RewriteRule ^(.*)$ /Home/$1 [L]
Очевидно, если вы запрашиваете URL с /Home/
в нем напрямую (например, http://site/Home/somepage1
, он не будет переписан на /Home/Home/somepage1
- так что имейте это в виду, если у вас есть подпапка с таким же именем, что и основная папка.
ОБНОВИТЬ: Учитывая новую информацию, попробуем такой подход:
Options +FollowSymLinks
RewriteEngine On
# rewrite incoming link to /Home/
# but only if it's a non-existing file
RewriteCond %{REQUEST_URI} !^/(Home/|index\.php)
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ /Home/$1 [L]
# route all requests for non-existing resources to /index.php
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule .* index.php [L]