繁体   English   中英

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

[英]Internal Server Error when rewriting URL to remove extension .htaccess

我正在使用 .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

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

当您调试它时,例如设置LogLevel debug rewrite:trace2 ,您将看到请求/about/被重写为/about/.php ,然后再次写入/about/.php.php ,再次写入/about/.php.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/ ,这样您就可以一次性完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM