两个案例的一个RewriteRule

时间:2012-12-07 19:23:33

标签: mod-rewrite

我需要一个重写规则来加载一个有时需要一个和两个变量的网站。

我需要通过以下方式访问我的网站:

blubb.com/user123
blubb.com/user123/

应重写为/profile.php?username=user123

blubb.com/user123/photos
blubb.com/user123/photos/

应重写为/profile.php?username=user123&site=photos

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)$ /profile.php?username=$1&site=$2 [NC]

根据上述规则,我可以致电blubb.com/user123/blubb.com/user123/photos而不是其他两个。

2 个答案:

答案 0 :(得分:1)

真的应该301将带有斜杠的网址重定向到没有斜杠的相同网址(在单独的重写中)。如果它们都提供相同的内容,Google会将其视为内容稀释并对您进行惩罚。

应该这样做:

# Redirect trailing slash to no trailing slash for Google:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,QSA,R=301]

# Route appropriately
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?(.*)$ /profile.php?username=$1&site=$2 [NC,QSA]

答案 1 :(得分:0)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z]+)(/([0-9A-Za-z]*)/?$ /profile.php?username=$1&site=$3 [NC]