using apache's mod_rewrite to parse SEO friendly URL's

后端 未结 2 672
青春惊慌失措
青春惊慌失措 2020-12-19 18:16

How do I convert something like

me.com/profile/24443/quincy-jones

to

me.com/profile.php?id=24443

or something

相关标签:
2条回答
  • 2020-12-19 19:16

    Make sure you have the mod_rewrite apache module enabled, then:

    RewriteEngine on
    
    RewriteRule ^/profile/([^/]*)/([^/]*)$  /profile.php?id=$1 [L]
    
    RewriteRule ^/store/([^/]*)/([^/]*)$    /store.php?id=$1 [L]
    

    You will probably want to handle the reverse condition in PHP, especially with the trailing name part (since that is not in the original URL). If you want to handle it in mod_rewrite without the name, make sure that you do not end up in a double rewrite (depends on the order of your rules). Also, you can use the [L] (last) switch to make the rule the last one used (subsequent rules will be skipped if there is a match).

    Also, it is possible to make a more generic rewrite rule, but you will need to carefully think about other URLs that might be affected.

    0 讨论(0)
  • 2020-12-19 19:19

    This should work for both:

    RewriteEngine on
    RewriteRule ^([^/]+)/([^/]+).*$ $1.php?id=$2 [L]
    

    Explanation:

    ^           - beginning of the string
    ([^/])      - first group that doesn't contain /
                  will match both 'profile' and 'store'
                  will also be referenced by $1 later
    /           - first slash separator
    ([^/])      - second group, id in your case
                  will be referenced by $2
    .*          - any ending of the request uri
    $           - end of request string
    

    You can also make it more precise so only the two request are rewritten and only digits are accepted as id:

    RewriteRule ^((profile|store))/(\d+).*$ $1.php?id=$2 [L]
    
    0 讨论(0)
提交回复
热议问题