.htaccess根据输入URL到不同的文件

时间:2015-01-25 23:06:16

标签: php apache .htaccess mod-rewrite

我正在尝试制作个人资料页面和编辑个人资料页面。配置文件页面运行良好,URL存储在数据库中。它的工作原理如下:

  1. 用户输入网址(localhost/postin'/profiles/username
  2. 输入网址后,.htaccess文件会重定向到显示个人资料信息的profile.php文件
  3. 以上工作非常好,.htaccess文件如下所示:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\w.'@\\\/-]+)$ profile.php?user=$1 [NC,L]
    
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>
    

    当我 localhost / postin'/ profiles / edit / username 时会发生什么?它不适用于我当前的.htaccess,因为它认为编辑是用户名的一部分,而实际上它只是另一个文件。我尝试了.htaccess

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\w.'@\\\/-]+)$ profile.php?user=$1 [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^edit/([\w.'@\\\/-]+)$ /profile.php?user=$1 [NC,L]
    
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>
    

    但它似乎没有用! :(

    所以这是我希望它做的一个简单的例子。用户的用户名是hawkeye。所以“ hawkeye ”进入localhost/postin'/profiles/hawkeye以获取他的个人资料。然后,为了编辑他的个人资料,他输入了localhost/postin'/profiles/edit/hawkeye

    这个.htaccess文件会是什么样的?谢谢! :)

    更新

    这是我正在使用的.htaccess:

    Options +FollowSymLinks
    RewriteEngine on
    
    # skip all files and directories from rewrite rules below
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    
    RewriteRule ^edit/([\w.'@\\\/-]+)$ editprofile.php?user=$1 [NC,L]
    RewriteRule ^([\w.'@\\\/-]+)$ profile.php?user=$1 [NC,L]
    
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>
    

    当我尝试使用URL localhost / postin'/ profiles / username localhost / postin'/ profiles / edit / username 时,它总是会转到 localhost / postin'/ profiles / username 无论如何......有什么想法吗? :D谢谢你

    固定

    Options +FollowSymLinks
    RewriteEngine on
    
    # skip all files and directories from rewrite rules below
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    
    RewriteRule ^edit/([\w.'@\\\/-]+)$ editprofile.php?user=$1 [NC,L]
    RewriteRule ^([\w.'@\\\/-]+)$ profile.php?user=$1 [NC,L]
    

1 个答案:

答案 0 :(得分:1)

您可以在:localhost/postin'/profiles/.htaccess

中使用它
Options +FollowSymLinks
RewriteEngine on

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^edit/([\w.'@\\\/-]+)$ editprofile.php?user=$1 [NC,L]
RewriteRule ^([\w.'@\\\/-]+)$ profile.php?user=$1 [NC,L]

重定向profiles/username - &gt; profiles/profile.php?user=username
重定向profiles/edit/username - &gt; profiles/editprofile.php?user=username