我在 Apache htaccess 文件中使用以下指令隐藏 php 文件扩展名
I am hiding the php file extention using the below directives in Apache htaccess file
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC] RewriteRule ^ %1 [R,L,NC] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [L]我有一个像这样的简单 html 表单
I have a simple html form like this
<form action="register.php" method="post"> <input type="text" name="name"> <input type="submit"> </form>在我的 PHP 页面中,这是我之前检查表单是否已发布的方式
And in my PHP page this is how I was earlier checking whether the form has been posted
if ($_SERVER["REQUEST_METHOD"] == "POST") { /* code to process the post */ }但是因为我添加了 htaccess 指令来隐藏 php 文件扩展名,所以POST"变成了GET"并且上面的代码永远不会执行.有没有好的办法来处理这个问题?我知道是内部重定向导致了这种情况,但是有没有一种优雅的方法来处理这个问题?出于显而易见的原因,我不想使用以下方法
But since I added the htaccess directives to hide the php filename extensionthe "POST" becomes "GET" and the above code never executes. Is there a good way to handle this? I know it is the internal redirect that causes this but is there an elegant way to handle this? I don't want to use the below method for obvious reasons
if (isset($_POST['submit'])) { 推荐答案POST 没有变成 GET,这是由于你的第一个重定向规则:
POST doesn't become GET, it is due to your first redirect rule:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC] RewriteRule ^ %1 [R,L,NC]它正在捕获一个包含 .php 的请求并重定向到一个没有 .php 的 URL.您正在查看 $_SERVER["REQUEST_METHOD"] 在它被此规则重定向后.
Which is catching a request with .php in it and redirecting to a URL without .php in it. You're looking at $_SERVER["REQUEST_METHOD"] after it has been redirected by this rule.
以这种方式修复:
RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC] RewriteRule ^ %1 [R,L]即不要重定向 POST 请求以避免 POST 数据丢失.
i.e. don't redirect POST requests to avoid POST data getting lost.
更多推荐
POST 在 htaccess 指令后变为 GET
发布评论