Apache mod_rewrite在页面之前查询字符串并删除扩展名

时间:2012-04-04 04:58:04

标签: apache mod-rewrite

我已经在网上搜索了我的mod_rewrite问题的答案,我觉得我已经结束了我的智慧。我会有这样的网址:http://www.website.com/dashboard.php?username=stackoverflow。这个网址并不是最漂亮的。所以我的目标是在这里做一些事情......

  1. 消除php文件的扩展(到目前为止,我已经能够使用下面显示的代码执行此操作,但我不知道它会根据我需要做的其他事情保留)
  2. 消除“www”前缀
  3. 在“.com /”
  4. 之后直接移动用户名查询字符串(仅当它是“用户名”,我不想匹配“id”等)
  5. 在查询字符串后移动php文件名(不带扩展名)。
  6. 最终网址应如下所示:http://website.com/stackoverflow/dashboardhttp://website.com/stackoverflow/profile

    我现在的代码消除了文件扩展名是这样的:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase / 
    
    # remove .php ONLY if requested directly
    RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
    RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]
    
    # remove trailing slash ONLY if it is not an existing folder
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    # rewrite to FILENAME.php if such file does exist and is not a folder
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ /$1.php [L,QSA]
    

    可悲的是,这只解决了我的一个问题,看了之后,我感觉会有更好的方法来做到这一点......

1 个答案:

答案 0 :(得分:1)

(1,3,4)据我所知,您希望使用漂亮的URL,但由PHP页面支持。所以它应该是这样的:

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(\w+)/profile$ /dashboard.php?username=$1 [L]

这会使http://website.com/stackoverflow/profile作为http://www.website.com/dashboard.php?username=stackoverflow

工作

(2)      #使用301

将www.site.com重定向到site.com
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]