htaccess规则在$ _GET变量中返回有趣的结果

时间:2011-07-26 02:35:43

标签: .htaccess

这是我的htaccess的片段,底部是用户帐户的重定向。

<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ /$1/ [R=301,L]
</IfModule>

Options -MultiViews 
Options +FollowSymlinks
Options -Indexes

ErrorDocument 404 /core/error/templates/404/

AddDefaultCharset utf-8

AddCharset utf-8 .html .css .js .xml .json .rss .php

<IfModule mod_rewrite.c>
  RewriteRule "(^|/)\." - [F]
</IfModule>

RewriteRule ^favicon.ico favicon.ico [NC,L]
# ----------------------------------------------------------------------
# RewriteRules
# ----------------------------------------------------------------------
# User profile redirect
#RewriteRule ^([^/]+)?$       /user/$1 [NC,R]
RewriteRule ^/([^/]+)/?$ profile.php?user=$1 [NC,L]

如果我访问www.foo.bar/samsam,它应该使用$_GET['user']填充"samsam",但当我执行回显时,它实际返回$_GET['user'] = profile.php

关于它为什么这样做的任何想法?

1 个答案:

答案 0 :(得分:0)

你很接近,但是你需要对最后一行进行一些修复。您需要删除正则表达式中的前导“/”字符。您还需要过滤上一个RewriteRule,以便它只影响不存在的文件和目录。所以...用以下内容替换它:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ profile.php?user=$1 [NC,L]