2013-07-18 5 views
0

У меня есть следующий файл .htaccess:Циклическое Перенаправление в .htaccess

AddDefaultCharset utf-8 
RewriteEngine on 
Options +SymLinksIfOwnerMatch 
RewriteBase/

# redirect all www-requests to no-www 
# - 
RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC] 
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L] 

# redirect all home pages to/(root) 
# - 
RewriteCond %{THE_REQUEST} ^.*/index\.(php|html?) 
RewriteRule ^(.*)index\.(php|html?)$ /$1 [R=301,L] 

# remove trailing slash from dirs 
# - 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/$ /$1 [R=301,L] 

# automatically add index.php when needed 
# - 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|login\.php|reg\.php|robots\.txt|css/|js/) 
RewriteRule ^(.*)$ /index.php [L] 

Файл .htaccess должен сделать следующее (для SEO):

  1. Преобразования в не-WWW (http://www.site.com должны станьте http://site.com)
  2. всех идентификаторов URI с задними косыми чертами должны преобразовать не замыкающий слэша: http://site.com/me/ должны быть перенаправлены http://site.com/me
  3. Все идентификаторы URI с index.php/index.html должны преобразовать только ничего: http://site.com/admin/index.php или http://site.com/admin/ должны быть в конечном итоге отображается как http://site.com

Однако текущая версия .htaccess приводит к циклическому перенаправлению при попытке доступа (http://site.com/admin). Реальный документ, который должен быть выбран браузером, - http://site.com/admin/index.php.

Может ли кто-нибудь помочь мне в этом вопросе?

ответ

1

Существует модуль под названием mod_dir, который автоматически загружается и вызывает запросы для каталогов, которые не имеют завершающей косой черты, чтобы получить перенаправление с завершающей косой чертой. Вы можете отключить это, используя директиву DirectorySlash, но обратите внимание на предупреждение о безопасности при отключении. Существует проблема с раскрытием информации, если вы отключите ее, а индексы по умолчанию не загрузятся. Тем не менее, правило lats (похоже) делает это, хотя и неправильно.

Во-первых, выключите DirectorySlash

DirectorySlash Off 

Затем вам нужно изменить последнее правило:

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME}/index.php -f 
RewriteRule ^(.*)$ /$1/index.php [L] 
Смежные вопросы