Mod rewrite 使用mod rewrite清理url

Mod rewrite 使用mod rewrite清理url,mod-rewrite,Mod Rewrite,您好,抱歉,如果这是某个地方,但我找不到与我的设置相匹配的答案 我有一个网站,我想从url中删除文件名,以便www.example.co.uk/products/products.php变成www.example.co.uk/products/。我习惯于从主页上删除/index.php,但我无法让它处理文件夹中的文件 下面是从主页url中删除我的index.php的工作代码。我如何修改它以从其他页面中删除products.php等 RewriteEngine on RewriteCond %{T

您好,抱歉,如果这是某个地方,但我找不到与我的设置相匹配的答案

我有一个网站,我想从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]

此规则将应用于指向PHP文件的每个URL,去掉后者并重定向到其余文件

RewriteEngine on

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\/[^/]+\.php\ HTTP/
RewriteRule ^(.*)/[^/]+\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
编辑
@艾希礼·布里斯科:我觉得你把这里的事情搞得有点乱。假设您的客户端请求的初始URL是
http://www.example.com/products/products.php
。这将被上述规则改写为
http://www.example.com/products/

由于现在重写的URL指向的是一个目录(后面的斜杠表示),而不是一个文件资源,Apache正试图在使用mod_dir的情况下提供(例如index.html或index.php)(我们可以安全地假设是这样)

您现在得到的
403禁止
响应表明您的web服务器正在运行的用户没有足够的权限读取目录索引文件和/或打开其包含的文件夹

要解决此问题,您需要确保确实存在一个目录索引文件(从而在产品目录中将
products.php
重命名为
index.php
),并且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]

RewriteCond%{THE_REQUEST}^[A-Z]{3,9}\/([^/]+/)*products\.php\HTTP/RewriteRule^([^/]+/)*)products\.php$HTTP://%{HTTP_HOST}/$1[R=301,L]我对以上内容进行了更改,现在我在访问产品页面时收到403禁止消息。请返回index.php代码,然后将products.php重命名为index.php?这在主页上有效,但在文件夹(例如products)中的任何其他页面上会导致403。php位于www.example.co.uk/products/products.php中。它可以在我的index.php上运行,我的index.php位于roots。谢谢您的快速回复,尽管我不知道为什么它不能在不在roots的页面上运行root@Anish我无法更改页面名称,因为我已将我的主体id设置为动态,这样我就可以使用css将页面作为目标,所以更改文件名不是一个选项。谢谢各位的建议,我将body id更改为php变量,因此不需要为我的样式命名文件。一切都很好,干杯。堆栈溢出当然是最好的站点to@AshleyBriscoe不客气。不过,别忘了接受和/或投票表决有用的答案。