[英]Getting 500 Internal Server Error when using .htaccess file to remove PHP extension
[英]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.