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

时间:2010-04-16 09:38:45

标签: php apache zend-framework .htaccess

我很确定这是Apache配置的一些问题,因为它曾经使用相同的PHP / MySQL配置在以前的托管提供商上工作。在我的应用程序中,用户可以通过转到这样的URI来删除照片:

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

参数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文件可以将文档根目录更改为/ 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]

在公共文件夹中有第二个用于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]

1 个答案:

答案 0 :(得分:2)

这可能是由于AllowEncodedSlashes指令设置为Off。坏消息是,它是在服务器级别配置的,所以.htaccess不会这样做。如果您无法更改它,那么我认为修改应用程序代码以处理非编码字符串将是最佳选择。

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

如果/ ret / part始终是最后一个,那么它应该不是那么大的问题(ret之后都是你的目的地)。