htaccess:删除扩展名,并重定向到index.php?p = <page> </page>

时间:2014-01-15 00:45:59

标签: .htaccess

RewriteRule ^([a-zA-Z0-9]+)?$ index.php?page=$1 [L]

我以前的代码重写了ex:domain.com/about到domain.com/index.php?page=about

所以现在,我想添加一个安全措施,以防有人添加.html或.php到底认为它应该在那里,我希望它删除扩展,但仍然遵循我以前的规则。如果文件实际存在,我希望此更改忽略。如果文件存在,则仍需要处理结束。

例如:

如果有人输入about.php或about.html,我希望它删除扩展名,然后处理上面的重写规则。

所以about.php会重写为about然后重写为index.php?page = about

如果可能的话,我希望它实际上将URL更改为domain.com/about。现在,上面的重写离开了domain.com/about,但只是通过index.php处理它。我很乐意,如果他们输入about.php或about.html,它会将浏览器重定向到domain.com/about。

有可能实现这一目标吗?我已经四处查看使用htaccess删除文件扩展名,但是没有一个能够执行我想要的重定向到index.php?page =。他们都希望以不同方式重定向。

修改

我需要这是普遍的。它不能只处理“关于”,我需要它来处理那个特定的地方。

1 个答案:

答案 0 :(得分:1)

如果这不是目录或文件,并且它有扩展名,则重定向不带扩展名:

RewriteEngine On
RewriteBase /

RewriteRule   ^([a-zA-Z0-9]+)?$   index.php?page=$1 [L]

RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILENAME}   !-f
RewriteRule   ^(.*)\..*$   $1 [R=301,L]