此规则将适用于指向 PHP 文件的每个 URL,剥离后者并重定向到其余部分。
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\/[^/]+\.php\ HTTP/
RewriteRule ^(.*)/[^/]+\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
编辑
@Ashley Briscoe:我认为你在这里有点搞砸了。假设您的客户请求的初始 URL 是http://www.example.com/products/products.php
. 这将被上述规则重写为http://www.example.com/products/
。
由于现在重写的 URL 指向一个目录(尾部斜杠表示)而不是文件资源,因此 Apache 正在尝试提供目录索引文件(例如 index.html 或 index.php)以防使用mod_dir(我们可以放心地假设它是)。
您现在得到的403 Forbidden
响应表明您的 Web 服务器正在运行的用户没有足够的权限来读取目录索引文件和/或打开其包含的文件夹。
要解决此问题,您需要确保确实存在目录索引文件(因此重命名products.php
为index.php
products 目录中)并且 Web 服务器有权读取该文件。
编辑 2
关于您的最后一条评论:如果重命名不是一个选项,那么您必须让 Apache 知道它应该提供什么文件。因此添加另一个规则,如下所示:
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\/[^/]+\.php\ HTTP/
RewriteRule ^(.*)/[^/]+\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^products/?$ /products/products.php [L]