2011-07-26 46 views
0

這是我的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

任何想法,爲什麼它的行爲這樣?

回答

0

你很近,但你需要對最後一行進行一些修復。您需要刪除正則表達式中的前導「/」字符。您還需要篩選最後的RewriteRule,以便它隻影響不存在的文件和目錄。所以...用下面的代替它:

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

我有!-d和!-f在我的代碼片段的頂部附近聲明,這是否有所作爲?我也試過,但是當我去foo.bar/index.php與作爲GET變量對待。我能夠得到它與此^([A-Za-z0-9 -_] +)$ /profile.php?user=$1 [NC,L]不知道爲什麼 – Eli

+0

是的,你確實需要!-d和!-f再次聲明。當它遇到RewriteRule時,它會清除以前的所有RewriteCond語句。換句話說,RewriteCond僅適用於他的下一個RewriteRule語句。 – curtisdf

+0

我認爲混淆部分源於第一個Rewrite塊。我可以問 - 爲什麼在那裏?你想在那裏做什麼? – curtisdf