繁体   English   中英

Apache mod_rewrite 页面前的查询字符串并删除扩展

[英]Apache mod_rewrite query string before page and remove extention

我已经搜索了 web 来寻找我的 mod_rewrite 问题的答案,我觉得我已经无计可施了。 我会有这样的 URL: http://www.website.com/dashboard.php?username=stackoverflow 这个 url 不是最漂亮的。 所以我的目标是在这里做一些事情......

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

最终的 URL 应该如下所示: http://website.com/stackoverflow/dashboard或者http://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, 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM