mod_rewrite проблема "слишком много перенаправлений" - PullRequest
1 голос
/ 01 декабря 2009

Попытка

  <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^TRACE
  RewriteRule .* - [F]
  RewriteCond %{HTTP_HOST} ^(.*)dev\.example\.edu$ [NC]
  RewriteRule ^/test(.*)$ http://dev.example.edu/test/index.php/test$1 [NC]
  </IfModule>

на сервере apache 2.2, чтобы эта перезапись работала, чтобы скрыть часть пути «index.php / test».

все, что я пробовал, либо зацикливает часть URL (index.php / test) в адресной строке, либо выдает ошибку «слишком много перенаправлений».

Я подозреваю, что "тестовая" часть уравнения, находящаяся с обеих сторон, отбрасывает его, но я не уверен, как заставить его работать.

я просто хочу: dev.example.edu/test/index.php/test* переписать на: dev.example.edu/test/*

спасибо

Ответы [ 2 ]

1 голос
/ 01 декабря 2009

Вам необходимо исключить путь назначения, чтобы избежать бесконечной рекурсии:

RewriteCond %{HTTP_HOST} ^(.*)dev\.example\.com$ [NC]
RewriteCond $1 !^/index\.php/test/
RewriteRule ^/test/(.*)$ http://dev.example.com/test/index.php/test/$1 [NC]

Здесь проверяется соответствие первой группы ($1), чтобы не совпадать ^/index\.php/test/.

Но если вы хотите переписать /test/index.php/test/… в /test/…, вам скорее понадобится это правило:

RewriteCond %{HTTP_HOST} ^(.*)dev\.example\.com$ [NC]
RewriteRule ^/index\.php/test/(.*)$ http://dev.example.com/test/$1 [NC]
0 голосов
/ 01 декабря 2009

За Джима в webmasterworld (спасибо!)

"Флаг [P] вызывает запрос обратного прокси-сервера к серверу по указанному URL-адресу; то есть он открывает новое исходящее HTTP-соединение и отправляет запрос этому серверу. По крайней мере, ваш Конфигурация выполняется вдвое медленнее, чем нужно, просто используя исходное рабочее правило, потому что ваш сервер отправляет себе новый запрос через HTTP вместо того, чтобы просто обслуживать содержимое из не сопоставленного по умолчанию пути к файлу.

Мне кажется, что все, что нужно, - это внутренняя перезапись, чтобы запросить ресурс по URL http://dev.example.edu/distribution/ обслуживаются с контентом, сгенерированным скриптом на сервере filepath /distribution/index.php/distribution/ "

RewriteEngine on 
# 
# Return 403-Forbidden response to TRACE requests 
RewriteCond %{REQUEST_METHOD} ^TRACE 
RewriteRule .* - [F] 
# 
# Internally rewrite requests for URL-path /recreation/<anything> 
# to filepath /eel/index.php/recreation/<anything> 
RewriteCond %{HTTP_HOST} ^dev\.example\.edu [NC] 
RewriteRule ^/recreation/(.*)$ /ee1/index.php/recreation/$1 [L] 
# 
# Internally rewrite requests for URL-path /distribution/<anything> 
# to filepath /distribution/index.php/distribution/<anything> 
RewriteCond %{HTTP_HOST} ^dev\.example\.edu [NC] 
RewriteRule ^/distribution/(.*)$ /distribution/index.php/distribution/$1 [L]

Так что я думаю, я просто усложнил ситуацию, чем должен был быть. Я удалил флаг P и удалил полный адрес сервера из rewriterule.

...