此规则将适用于指向一个PHP文件中的每个URL,剥离后者并发出重定向到剩余。
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\/[^/]+\.php\ HTTP/
RewriteRule ^(.*)/[^/]+\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
编辑
@Ashley布里斯科:我想你搞乱的东西在这里一点。假设您的客户请求的初始URL是http://www.example.com/products/products.php
。这将被上述规则改写为http://www.example.com/products/
。
因为现在重写URL指向一个目录(尾随斜线表示),而不是一个文件资源,Apache是努力服务于directory index file(如index.html或的index.php)的情况下,mod_dir是正在使用(我们可以放心地假设它是)。
您现在得到的403 Forbidden
响应表明您的Web服务器正在运行的用户没有足够的权限来读取目录索引文件和/或打开其包含的文件夹。
要解决此问题,您需要确保实际存在目录索引文件(因此在产品目录中将products.php
重命名为index.php
),并且Web服务器有权读取该文件。
EDIT 2
关于你的最后的评论:如果重命名是不是一种选择,那么你就必须让阿帕奇知道是什么文件,应该改为放送。因此添加另一个规则,像这样:
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]
的RewriteCond%{THE_REQUEST}^[AZ] {3,9-} \ /([^ /] + /)*产品\ .PHP \ HTTP/ 重写规则^( ([^ /] + /)*)products \ .php $ http://%{HTTP_HOST}/$ 1 [R = 301,L]我改变了上述现在我得到403禁止消息时访问产品页 – 2012-04-15 10:07:47
恢复到index.php代码,然后将products.php重命名为index.php? – 2012-04-15 10:12:15