mod_rewrite - предотвращает множественные перенаправления - PullRequest
2 голосов
/ 05 января 2011

Структура моей папки:

- nameoftherootfolder
-- app
-- public
--- .htaccess
--- index.php

Теперь у меня проблема в том, что в некоторых случаях мой apache слишком часто перезаписывает внутреннюю, что я получаю 500 ошибок сервера, вот журнал:

[Wed Jan 05 17:51:54 2011] [error] [client 127.0.0.1] Request exceeded the limit of 3 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
[Wed Jan 05 17:51:54 2011] [debug] core.c(3046): [client 127.0.0.1] r->uri = /nameoftherootfolder/public/index.php
[Wed Jan 05 17:51:54 2011] [debug] core.c(3052): [client 127.0.0.1] redirected from r->uri = /nameoftherootfolder/public/index.php
[Wed Jan 05 17:51:54 2011] [debug] core.c(3052): [client 127.0.0.1] redirected from r->uri = /nameoftherootfolder/public/index.php
[Wed Jan 05 17:51:54 2011] [debug] core.c(3052): [client 127.0.0.1] redirected from r->uri = /nameoftherootfolder/nothere/

Мой .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

index.php обрабатывает все запросы, а также обрабатывает, если URL-адрес, к которому был получен доступ, например, не существует.

Это работает, если URL-адрес, к которому получен доступ, существует, но URL-адрес «неправильный». Я понял это только после того, как установил псевдоним Apache:

Alias /nameoftherootfolder/ "C:/somepathshere/WAMP/www/nameoftherootfolder/public/" 

<Directory "C:/somepathshere/WAMP/www/nameoftherootfolder/public/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order allow,deny
    Allow from all
</Directory>

Как теперь я могу предотвратить слишком много внутренних перенаправлений с помощью Apache? Может быть, есть RewriteCond? Я использую Apache 2.2.11.

Edit:

Если я добавлю index.php/ в URI, это будет работать, но это недружественный SEO, пользователь недружелюбный и выглядит ужасно, например. запрос. http://localhost/nameoftherootfolder/index.php/nothere/ или http://localhost/nameoftherootfolder/index.php/index/

Редактировать # 2:

После того, как я добавил

RewriteBase /nameoftherootfolder/

это работает, знаю.

Ответы [ 3 ]

6 голосов
/ 06 января 2011

После того, как я добавил

RewriteBase /nameoftherootfolder/

, оно работает.

1 голос
/ 05 января 2011

Вам нужно исключить вызовы на index.php, чтобы предотвратить бесконечный цикл.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule ^.*$ index.php [NC,L]
0 голосов
/ 17 июля 2015

В моем случае у меня был сайт на поддомене в папке другого сайта, настроенного в Apache.Это исправило мои ошибки переписывания:

RewriteBase /
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...