使用编码参数请求URI时未找到404

问题描述:

我非常确定这是Apache配置中的一些问题,因为它曾用于使用相同PHP/MySQL配置的以前的托管提供程序。在我的应用程序,用户可以通过去的URI这样来删除照片:使用编码参数请求URI时未找到404

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

的paramater ID是一个照片的ID被删除,参数RET是一个相对的URL,其中用户后应重定向去除照片,但点击一样,我得到404 Not Found错误与文本的链接后:

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文件,更改文档根目录/公用:

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] 

在公共文件夹中存在的MVC第二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] 

这是可能是由于AllowEncodedSlashes指令被设置为关闭。坏消息是,它在服务器级配置,所以.htaccess不会。如果你不能改变它,那么我认为修改应用程序代码来处理非编码字符串将是一条可行的路。

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

如果/ RET /部分总是最后一个,它不应该是太大的问题(所有RET后是你的目标)。

+0

那么,我会要求服务器管理员关闭它。修改应用程序太麻烦了。 – 2010-04-16 19:43:10

+0

这是问题...我不得不重写应用程序来使用:而不是/然后我只是在PHP中执行str_replace(':','/',$ requestVar)。 – 2010-04-17 19:09:19