我很确定这是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]
答案 0 :(得分:2)
这可能是由于AllowEncodedSlashes指令设置为Off。坏消息是,它是在服务器级别配置的,所以.htaccess不会这样做。如果您无法更改它,那么我认为修改应用程序代码以处理非编码字符串将是最佳选择。
.../ret/my-account%252Fedit-album%252Fid%252F1 -> .../ret/my-account/edit-album/id/1
如果/ ret / part始终是最后一个,那么它应该不是那么大的问题(ret之后都是你的目的地)。