使用mod_rewrite清理网址

时间:2012-04-15 09:58:48

标签: mod-rewrite

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

我有一个网站,我想从网址中删除文件名,以便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]

任何帮助表示赞赏

1 个答案:

答案 0 :(得分: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正在尝试提供directory index file(例如index.html或index.php)以防<正在使用strong> mod_dir (我们可以放心地假设它)。

您现在获得的403 Forbidden响应表示您的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]
相关问题