如何创建堆栈溢出样式的用户URL?

时间:2011-07-22 15:53:30

标签: .htaccess mod-rewrite

我想映射:

mywebsite.com/users/ - > mywebsite.com/users/users.php
mywebsite.com/users - > mywebsite.com/users/users.php
mywebsite.com/users/username - > mywebsite.com/users/user.php?name=username

目前,我在用户目录中使用此.htaccess:

RewriteEngine On

RewriteRule ^([a-zA-Z0-9_])*$ user.php?name=$1 [L]
RewriteRule ^.*$ users.php [L]

但是,它永远不会生成user.php?name=$1网址。

为什么不起作用?

2 个答案:

答案 0 :(得分:1)

以下是规则(放在网站根文件夹中的 .htaccess 。如果放在别处,则需要进行一些调整):

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# 1
RewriteRule ^users/?$ /users/users.php [L]

# 2
RewriteCond %{REQUEST_URI} !^/users/users?\.php
RewriteRule ^users/([^/]+)$ /users/user.php?name=$1 [QSA,L]
  1. 规则#1将匹配您的第2个网址。

  2. 规则#2将适用于特定的用户映射。它将确保它不会重写已经重写的URL。


  3. <强>更新 如果要将其放入/users/文件夹中的.htaccess文件中,则此URL mywebsite.com/users(不带斜杠)很可能无效。

    但无论如何 - 这是规则:

    Options +FollowSymLinks -MultiViews
    RewriteEngine On
    
    # 1
    RewriteRule ^$ users.php [L]
    
    # 2
    RewriteCond %{REQUEST_URI} !^/users/users?\.php
    RewriteRule ^([^/]+)$ user.php?name=$1 [QSA,L]
    

答案 1 :(得分:0)

我认为它按顺序应用这两个规则:url匹配第一个规则,因此它添加user.php?name=$1,然后它匹配第二个规则,因此它用{{1}替换字符串}。如果这是问题,那么对于您的特定情况,您可以通过将第二个正则表达式替换为users.php来修复它。