试图获得一个友好的网址但没有任何反应

时间:2015-09-04 23:44:48

标签: php .htaccess mod-rewrite url-rewriting friendly-url

我正在尝试隐藏部分网址并仅显示目录等变量。

例如:从https://somesite.com/users.php?user=Alex更改为https://somesite.com/Alex/或从https://somesite.com/users.php?user=Alex&tab=photos更改为https://somesite.com/Alex/photos/

我的.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On

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

    # hide GET variables from url for messages page.
    RewriteRule ^messages/(.*) messages.php?message=$1 [L,QSA]

    # hide users.php and transforming variables in directories.
    RewriteRule ^/%1 users.php?user=$1 [L,QSA]
</IfModule>

但是,如果我访问https://somesite.com/users.php?user=Alex没有任何反应,如果我访问https://somesite.com/Alex/,则会返回错误404.

4 个答案:

答案 0 :(得分:1)

将此代码用于users.php脚本:

RewriteRule  (.*) users.php?user=$1 [L,QSA]

此规则必须在邮件按此顺序排序后才能适用于这两种情况。

答案 1 :(得分:1)

我看不出最后RewriteRule怎么做你想要的。 你可以改用它:

RewriteRule ^([^/]+)/?$ users.php?user=$1 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ users.php?user=$1&tab=$2 [L,QSA]

编辑:您还可以使用mod_rewrite将使用旧网址的用户重定向到新网址。这应该有效:

RewriteCond %{QUERY_STRING}     ^user=([^&]+)$
RewriteRule ^/users.php$        /%1/               [L,R=301]

RewriteCond %{QUERY_STRING}     ^user=([^&]+)&tab=([^&]+)$
RewriteRule ^/users.php$        /%1/%2/            [NC,L,R=301]

替代方案;你可以在php中读取REQUEST_URI变量(它应该包含重写前的地址)并检测它是否是旧的。如果是,则重定向到新的。

答案 2 :(得分:1)

请在.htaccess文件中写下此代码

    RewriteEngine On    # Turn on the rewriting engine
    RewriteRule    ^([A-Za-z0-9-]+)/?$    users.php?user=$1    [NC,L]
    RewriteRule    ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$    users.php?user=$1&tab=$2    [NC,L]

答案 3 :(得分:1)

似乎最简单的解决方案是将每个查询发送到index.php?q = $ 1或其他script.php来管理路径:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]
</IfModule>

index.php可以检查两种情况:

<?php

 $q = explode('/',$_GET['q']);
 $query=$q[0]; 


 if($query=='messages'){ 
    $message = $q[1];
    require "messages.php"; 
 }else{
    $user = $query;
    require "users.php"; 
 }

?>