Php 重写URL以删除扩展名.htaccess时出现内部服务器错误
我正在使用.htaccess删除我网站上的.php扩展名。但在某些情况下,它会显示“内部服务器错误” 这是我的.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
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/
都匹配,这样您就可以一次解决问题。查看您的错误日志,查看错误是什么。对我来说非常有效,这应该是公认的答案。谢谢奥拉夫!