404 не найден при запросе URI с закодированными параметрами - PullRequest
3 голосов
/ 16 апреля 2010

Я почти уверен, что это некоторая проблема с конфигурацией Apache, потому что он работал на предыдущем хостинг-провайдере с той же конфигурацией PHP / MySQL. В моем приложении пользователи могут удалять фотографии, используя такие URI:

http://example.com/my-account/remove-media/id/9/ret/my-account%252Fedit-album%252Fid%252F1

Идентификатор параметра - это идентификатор удаляемой фотографии, параметр ret - это относительный URL-адрес, куда следует перенаправить пользователя после удаления фотографии, но после нажатия на ссылку, подобную этой, я получаю сообщение об ошибке 404 Не найдено текст:

Not Found

The requested URL /public/my-account/remove-media/id/9/ret/my-account/edit-album/id/1 was not found on this server.

Хотя раньше он работал на моем предыдущем хостинг-провайдере, поэтому я думаю, что это просто какая-то простая проблема конфигурации Apache?

Еще одна вещь, есть файл htaccess, который меняет корень документа на / public:

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

В общей папке есть второй файл htaccess для MVC:

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

1 Ответ

2 голосов
/ 16 апреля 2010

Вероятно, это связано с тем, что директива AllowEncodedSlashes установлена ​​в положение Off.Плохая новость в том, что он настроен на уровне сервера, поэтому .htaccess не подойдет.Если вы не можете изменить его, то я думаю, что изменение кода приложения для обработки некодированных строк будет правильным решением.

.../ret/my-account%252Fedit-album%252Fid%252F1 -> .../ret/my-account/edit-album/id/1

Если / ret / part всегда последняя,это не должно быть большой проблемой (все после ret - ваш пункт назначения).

...