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 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题