Добавление косой черты вызывает ошибку - PullRequest
0 голосов
/ 02 марта 2011

Вот мой код перезаписи:

    RewriteEngine On
    RewriteBase "/"
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ http://www.whatever.com/$1/ [R=301,L]

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

Это для сайта механизма выражения. Если я возьму эти 2 строки, сайт работает нормально:

    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ http://www.whatever.com/$1/ [R=301,L]

Это строки, которые я добавил, чтобы добавить косую черту к любому URL, если у него его нет, чтобы избежать дублирования индексации в Google. Это приводит к этой ошибке в моем файле журнала: Запрос превысил l «Предел 10 внутренних перенаправлений из-за вероятной ошибки конфигурации»

Я предполагаю, что он не обрабатывает право RewriteCond и не входит в бесконечный цикл. Есть мысли о том, почему это происходит?

Ответы [ 3 ]

1 голос
/ 16 марта 2011

Вот мой ExpressionEngine .htaccess, который удаляет завершающие косые черты, не уверен, есть ли у вас предпочтения, но я думаю, что без них он выглядит лучше.

RewriteEngine on

# get rid of trailing slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php) [NC]
RewriteRule ^(.+)\/$ /$1 [L,R=301]

# no plain index.php either
RewriteRule ^(index\.php)$ / [L,NC,R=301]

# rewrite index.php
RewriteCond $1 !^(images|system|themes|favicon\.ico|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
0 голосов
/ 02 марта 2011

Во-первых, принцип: после любого переписывания весь набор правил обрабатывается с самого начала.Флаг [L] не препятствует этому;он контролирует, является ли правило последним в текущем цикле.

В этом случае проблема является последним правилом.Он переписывает что-то вроде этого:

foo → index.php/foo → index.php/index.php/foo → ...

Когда вы удаляете две строки, это правило получает присоединенные условия !-f и !-d, что предотвращает цикл.

Из группировкииз линий выглядит так, как будто вы хотите прикрепить эти два условия ко всем следующим правилам.Вы не можете этого сделать, но вместо этого вы можете прикрепить противоположные условия к правилу, которое остановит обработку:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
0 голосов
/ 02 марта 2011

Включите ведение журнала перезаписи (RewriteLogLevel 3 или около того должно это делать), и, скорее всего, вы увидите, что запрос переходит назад и вперед между

 www.whatever.com/blah
 www.whatever.com/blah/
 www.whatever.com/blah
 www.whatever.com/blah/
 www.whatever.com/blah
 www.whatever.com/blah/
 etc....
...