Php 重写URL以删除扩展名.htaccess时出现内部服务器错误

Php 重写URL以删除扩展名.htaccess时出现内部服务器错误,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我正在使用.htaccess删除我网站上的.php扩展名。但在某些情况下,它会显示“内部服务器错误” 这是我的.htaccess代码: AddHandler x-httpd-php5-6 .php Options +FollowSymLinks RewriteEngine on RewriteRule productos/(.+)/? /prueba/listado-productos.php?category=$1 RewriteRule productos/(.+)/(.+)/? /pru

我正在使用.htaccess删除我网站上的.php扩展名。但在某些情况下,它会显示“内部服务器错误”

这是我的.htaccess代码:

AddHandler x-httpd-php5-6 .php

Options +FollowSymLinks
RewriteEngine on
RewriteRule productos/(.+)/? /prueba/listado-productos.php?category=$1
RewriteRule productos/(.+)/(.+)/? /prueba/listado-productos.php?category=$1&subCategory=$2
RewriteRule productos/(.+)/(.+)/(.+)/? /prueba/listado-productos.php?category=$1&subCategory=$2&product=$3
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
最后三行是重写URL以删除.php扩展名的代码

假设我在根文件夹中有一个名为
directory
的文件夹和一个名为
about.php
的文件:

example.com -----> works
example.com/directory ----> works
example.com/directory/ ----> works
example.com/about ----> works
example.com/about/ ----> internal server error

我怎样才能解决这个问题?我什么都试过了

当您调试这个时,例如设置
logleveldebug rewrite:trace2
,您将看到请求
/about/
被重写为
/about/.php
,再次被重写为
/about/.php.php
,再次被重写为
/about/.php.php
,等等,直到它最终以失败

AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制

您可以使用考虑尾部斜杠的附加规则来防止这种情况。这条规则与您已有的规则大致相同

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)/$ $1.php [L]
唯一的区别是规则模式中的尾随斜杠。这将把请求
/about/
重写为
/about.php
,而不是
/about/.php
,从而找到正确的脚本而不是循环


如果您希望最小化规则的数量,例如,仅使用一个规则而不是这两个规则,您也可以尝试此稍微修改的模式

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*?)/?$ $1.php [L]

此模式与
/about
/about/
都匹配,这样您就可以一次解决问题。

查看您的错误日志,查看错误是什么。对我来说非常有效,这应该是公认的答案。谢谢奥拉夫!