删除URL中的.php扩展名

时间:2013-01-21 18:37:36

标签: php .htaccess

我之前更改了我的.htaccess文件,以便我的'子目录'(13 /)可以是我用于主域的“目录”,添加:

RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$
RewriteRule ^(/)?$ 13/index.php [L]

现在,我想将.php扩展名和扩展程序(例如index.php?eventid=3)移至index/something

编辑#1 [其中something是数据库中存储的id的名称]

我该怎么做? 以前,我在一些PHP框架中工作,但他们已经有一个专用的url文件。所以我从未想过太多。但这一次,我没有使用任何框架,所以我需要修改.htaccess

我环顾四周,但无法找到任何可靠的博客/来源。

编辑#2

我的子目录是public_html/13/

即,www.mydomain.com重定向到www.mydomain.com/13/ 现在,我想以www.mydomain.com/13/events.php?eventid=1

的身份访问www.mydomain.com/events/44

2 个答案:

答案 0 :(得分:1)

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([0-9]+)/?$ $1.php?$2=$3

上述代码会将http://www.mydomain.com/index/eventid/3/重定向到http://www.mydomain.com/index.php?eventid=3

htaccess非常灵活,一旦理解了语法,就可以轻松创建上述变体。您将需要阅读可以使用的正则表达式以及Rewrite模块提供的无数选项。我的大多数重定向看起来都像上面那样,非常简单。

编辑:你正在寻找的一个例子是Wordpress,它使用slugs来识别基于比ID号更具语义的页面。您必须从数据库中对项目的名称进行url编码,并将其作为slug存储在数据库中,或者在检索页面内容的数据库查询中找到使其可用的其他方法。然后你的htaccess看起来像这样:

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/?$ $1.php?slug=$2

在PHP中,您需要创建slug并将它们存储在db中,以便它们可以在查询中用作ID。

EDIT2:尝试将整个htaccess文件更改为:

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.yourdomain\.com$ [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [R=301,L]

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([0-9]+)/?$ $1.php?$2=$3

</IfModule>

我测试了它并且它有效。你的htaccess中的其他东西搞砸了。

答案 1 :(得分:1)

只需使用以下规则:

 RewriteRule ^index/([0-9]+)/?$ /index.php?eventid=$1 [QSA,L]