Mod rewrite 一条规则适用于两种情况

Mod rewrite 一条规则适用于两种情况,mod-rewrite,Mod Rewrite,我需要一个重写规则来加载一个有时需要一个或两个变量的站点 我需要通过以下方式访问我的网站: blubb.com/user123 blubb.com/user123/ 应重写为/profile.php?username=user123 及 应该重写为/profile.php?username=user123&site=photos RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule

我需要一个重写规则来加载一个有时需要一个或两个变量的站点

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

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

应该重写为
/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
,但不能调用其他两个。

你真的应该用一个斜杠将你的URL重定向到没有斜杠的相同URL(在另一次重写中)。如果两者提供相同的内容,谷歌会将其视为内容稀释,并因此惩罚你

这应该做到:

# 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]

谢谢它几乎可以完美地工作。唯一的问题是blubb.com/user123/(带斜杠)给了我一个错误404。另外3种情况非常好。顺便说一句,你真的应该用一个斜杠将你的URL重定向到没有斜杠的相同URL(在另一个重写中)。如果他们两个都提供相同的内容,谷歌会将其视为内容稀释,并因此惩罚你。好吧,我更新了答案。你介意给我打勾吗?:)我肯定会的,但不幸的是它不起作用^^复制了你的整个代码,我的.htacces现在看起来是这样的:RewriteEngine On#重定向尾随斜杠到没有尾随斜杠的Google:RewriteCond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^(.*)/$/$1[L,QSA,R=301]#路由适当重写cond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^([^/]+)(/[^/]+)?$/profile.php?用户名=$1&site=$2[NC,QSA],但如果我键入的“照片”被忽略,我会登录user123站点
# 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]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z]+)(/([0-9A-Za-z]*)/?$ /profile.php?username=$1&site=$3 [NC]