htaccess重写用户名乱码页面

时间:2014-07-25 15:18:41

标签: apache .htaccess mod-rewrite

我可以使用 mysite.com/username 访问个人资料,但我无法访问 mysite.com/home ,原来是 mysite.com/index.php? TAB1 =家

与所有其他网页相同的问题,例如,我也无法访问 mysite.com/messages ,其原来是 mysite.com/index.php?tab1=messages

我想使用相同的链接访问配置文件和页面。 mysite.com/profile &的 mysite.com/page

这是我使用的htaccess代码。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^\/\/]*)$  index.php?tab1=profile&id=$1 [NC]
RewriteRule ^([^\/\/]*)/([^\/\/]*)(|\/)$  index.php?tab1=profile&tab2=$2&id=$1 [NC]
RewriteRule ^([^\/\/]*)/([^\/\/]*)/([^\/\/]*)(|/)$  index.php?tab1=profile&tab2=$2&tab3=$3&id=$1 [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^\/\/]*)$  index.php?tab1=$1 [NC]

1 个答案:

答案 0 :(得分:0)

你有这个规则:

RewriteRule ^([^\/\/]*)$  index.php?tab1=profile&id=$1 [NC]

哪个模式为^([^\/\/]*)$。所以这匹配"用户名","家庭", AND "消息"。这就是为什么总是进入个人资料的原因,因为该规则不加区分地匹配所有内容而没有/

因此,具有相同模式的最后一条规则永远不会匹配任何内容。您需要将配置文件设置为不同的模式,或者对#34; home"的匹配进行硬编码。和"消息"以及其他没有进入个人资料的内容。

类似于:

RewriteEngine on

RewriteRule ^(home|messages)$ index.php?tab1=$1 [L]

RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/\/]*)$  index.php?tab1=profile&id=$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/\/]*)/([^\/\/]*)(|\/)$  index.php?tab1=profile&tab2=$2&id=$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/\/]*)/([^\/\/]*)/([^\/\/]*)(|/)$  index.php?tab1=profile&tab2=$2&tab3=$3&id=$1 [NC,L]

或者类似的东西可能吗?

RewriteEngine on

RewriteRule ^profile-([^\/\/]*)$  index.php?tab1=profile&id=$1 [NC]
RewriteRule ^profile-([^\/\/]*)/([^\/\/]*)(|\/)$  index.php?tab1=profile&tab2=$2&id=$1 [NC]
RewriteRule ^profile-([^\/\/]*)/([^\/\/]*)/([^\/\/]*)(|/)$  index.php?tab1=profile&tab2=$2&tab3=$3&id=$1 [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/\/]*)$  index.php?tab1=$1 [NC]

使用户个人资料看起来像:mysite.com/profile-username