2012-04-15 92 views
0

嗨,如果这是某处,但我找不到一个适用于我的设置的答案apologys。用mod重写清理url

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

任何帮助赞赏

+0

的RewriteCond%{THE_REQUEST}^[AZ] {3,9-} \ /([^ /] + /)*产品\ .PHP \ HTTP/ 重写规则^( ([^ /] + /)*)products \ .php $ http://%{HTTP_HOST}/$ 1 [R = 301,L]我改变了上述现在我得到403禁止消息时访问产品页 – 2012-04-15 10:07:47

+0

恢复到index.php代码,然后将products.php重命名为index.php? – 2012-04-15 10:12:15

回答

0

此规则将适用于指向一个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] 
+0

在主页上工作,但在文件夹中的任何其他页面上导致403,例如products.php位于www.example.co.uk/products/products.php。它适用于我的index.php根 – 2012-04-15 10:30:00

+0

感谢您的快速响应,虽然不知道为什么它不会在根目录下的页面上工作 – 2012-04-15 10:41:17

+0

@Anish我无法更改页面名称,因为我设置了我的身份标识要动态,所以我可以用CSS来定位页面,所以更改文件名不是一个选项 – 2012-04-15 10:45:53