多个不同的php页面需要友好的URL - url重写

时间:2014-11-27 12:11:04

标签: php .htaccess mod-rewrite url-rewriting

我有php网站有多个不同的php页面:

Example:
http://www.mywebsite.com/post.php?group_id=10&post_id=1
http://www.mywebsite.com/image.php?group_id=10&img_id=1
http://www.mywebsite.com/poll.php?group_id=10&poll_id=1
http://www.mywebsite.com/group.php?group_id=10
http://www.mywebsite.com/user.php?uid=158
....

我需要这些网址如下:

http://www.mywebsite.com/post/10/1
http://www.mywebsite.com/image/10/1
http://www.mywebsite.com/poll/10/1
http://www.mywebsite.com/group/10
http://www.mywebsite.com/user/158
....

注意:我没有这些页面,我有很多这样的页面。

我的htaccess文件如下:

<IfModule mod_rewrite.c>     
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [NC,L]
</IfModule>

我的htaccess重定向到单个索引页面的问题,如何让htaccess重定向到每个页面的params。

3 个答案:

答案 0 :(得分:0)

有新规则分别处理2个参数和一个参数:

<IfModule mod_rewrite.c>     
    RewriteEngine On

    RewriteRule ^(group)/(\d+)/?$ $1.php?group_id=$2 [NC,L,QSA]

    RewriteRule ^(user)/(\d+)/?$ $1.php?uid=$2 [NC,L,QSA]

    RewriteRule ^(image)/(\d+)/(\d+)/?$ $1.php?group_id=$2&img_id=$3 [NC,L,QSA]

    RewriteRule ^(poll|post)/(\d+)/(\d+)/?$ $1.php?group_id=$2&$1_id=$3 [NC,L,QSA]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [NC,L]
</IfModule>

答案 1 :(得分:0)

使用htaccess不是一个很好的选择,因为你有这么多页面。

从长远来看,这是不可维护的。 请使用任何路由模块(如http://fatfreeframework.com/routing-engine

答案 2 :(得分:0)

通过向规则添加一些唯一路径来解决另一个问题,

example:

RewriteRule ^news/([^/]*)\.html$ /posts.php?id=$1 [L]
RewriteRule ^polls/([^/]*)\.html$ /polls.php?id=$1 [L]

result:

domain.com?posts.php?id=421 -> domain.com/news/421.html
domain.com?polls.php?id=17 -> domain.com/polls/17.html