dousuohe5882 2012-03-31 23:03
浏览 30
已采纳

具有友好URL的多个htaccess重写规则

My mobile site (tiny custom CMS inspired by wordpress) has a homepage, blog page, a news page, an about page and a contact page where ./blog ./news ./about and ./contact are actual folders. Homepage, Blog and News are paginated. About and Contact are single pages, no pagination.

I need htaccess rewrite rules to do the following (A) and (B). I have only made progress with (A), and the htaccess file is in the site root.

(A)

  • m.website.com/index.php?page=1 re-writes to m.website.com
  • m.website.com/index.php?page=2 re-writes to m.website.com/page/2 etc
  • m.website.com/blog/index.php?page=1 rewrites to m.website.com/blog
  • m.website.com/blog/index.php?page=2 re-writes to m.website.com/blog/page/2 etc
  • m.website.com/news/index.php?page=1 rewrites to m.website.com/news
  • m.website.com/news/index.php?page=2 re-writes to m.website.com/news/page/2 etc

Problems: Below is what I'm using for the above, but I only got it working for the homepage for now. I don't know how to combine the rules to include blog and news pages too. Also, it duplicates my links because m.website.com and m.website.com/page/1 are both in use. I need to get rid of /page/1 everywhere. Pagination should start only from page 2. I tried to get rid of it using the RedirectMatch but it didn't work so I commented it out.

RewriteEngine On  
RewriteBase /
RewriteRule ^page/(.*) index.php?page=$1 [NC]
#RedirectMatch 301 ^/page/1/$ http://m.website.com/

(B)

  • I already have a permalink.php file which accepts pretty URLs and returns their postIDs
  • The read-more link for each article on the home, blog or news page will have the format http://m.website.com/2012/03/the-post-title
  • When clicked, the htaccess will query permalink.php with the string /2012/03/the-post-title to get the postID, then opens http://m.website.com/article.php?id=postID but the address in the address bar will be http://m.website.com/2012/03/the-post-title and this shows the article in full, be it home page, blog page or news page.

Problem: I have been searching and I'm not exactly sure how to go about (B) above but I know it's possible. In the end, all rules for A and B will be in the same htaccess file in the site root.

Thanks

  • 写回答

1条回答 默认 最新

  • dongtui0650 2012-04-01 08:04
    关注

    This should do the trick for you. It looks like you have done most of it so there isn't muc to do.

    RewriteEngine On  
    RewriteBase /
    
    # you do not need a rewrite for the root as you should have index.php
    # as your default document and page 1 as your default page
    
    RewriteRule ^page/1/?$                    / [NC,L,R=301]
    RewriteRule ^page/(\d+)/?$                index.php?page=$1 [NC,L]
    
    # you do not need a rewrite for blog as you should have index.php as your
    # default document and page 1 as your default page
    
    # you do not need a rewrite for news as you should have index.php as your
    # default document and page 1 as your default page
    
    RewriteRule ^(blog|news)/page/1/?$        $1 [NC,L,R=301]
    RewriteRule ^(blog|news)/page/(\d+)/?$    $1/index.php?page=$2 [NC,L]
    
    ######################################################################
    ################## ADD YOUR PERMALINK.PHP CODE HERE ##################
    ######################################################################
    

    UPDATE To effectively turn /2012/03/the-post-title into a postID you need to be able to ask your database to do that for you as it is the only thing that knows the answer. So you can either use a RewriteMap http://httpd.apache.org/docs/2.3/rewrite/rewritemap.html#dbd I have never done this myself and I would advise against it. Not because I know there is a problem with it I just have a bad feeling about it.

    The alternative and one I would champion is to just do something like this:-

    RewriteRule ^(\d{4})/(\d{2})/([^/]+))/?$     article.php?postIdentifier=$1/$2/$3 [L]
    

    Then in article.php hit the database and use the information in the postIdentifier to get the correct article.

    Make sense?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化