Структура моей папки:
- 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/
это работает, знаю.