0

嗨道歉,如果这是某个地方,但我找不到适用于我的设置的答案。

我有一个网站,我想从 url 中删除文件名,这样www.example.co.uk/products/products.php就变成www.example.co.uk/products/. 我习惯于从主页中删除 /index.php,但我无法让它与文件夹中的文件一起使用。

这是从主页 url 中删除我的 index.php 的工作代码我如何修改它以从我的其他页面中删除 products.php 等?

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
RewriteRule ^(([^/]+/)*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

任何帮助表示赞赏

4

1 回答 1

0

此规则将适用于指向 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.phpindex.phpproducts 目录中)并且 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]
于 2012-04-15T10:13:19.907 回答