Php 试图获得一个友好的url,但什么也没发生

Php 试图获得一个友好的url,但什么也没发生,php,.htaccess,mod-rewrite,url-rewriting,friendly-url,Php,.htaccess,Mod Rewrite,Url Rewriting,Friendly Url,我试图隐藏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: 但是,如果我访问https://somesite.com/users.php?user=Alex

我试图隐藏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:


但是,如果我访问https://somesite.com/users.php?user=Alex 没有任何事情发生,如果我访问https://somesite.com/Alex/ 返回错误404。

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

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

此规则必须在messages规则之后,才能适用于这两种情况。

我看不出最后一个重写规则如何满足您的要求。 您可以使用此选项:

RewriteRule ^([^/]+)/?$ users.php?user=$1 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ users.php?user=$1&tab=$2 [L,QSA]
编辑:您还可以使用mod_rewrite将使用旧url的用户重定向到新url。这应该起作用:

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变量,它应该在重写之前包含地址,并检测它是否是旧的地址。如果是,则重定向到新代码。

请在.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]

似乎最简单的解决方案是将每个查询发送到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"; 
 }

?>

如果出现错误500,错误日志中应该有一些内容。否则我们只能猜测。我的猜测是,在上一个重写规则中有额外的空间-这样它有3个参数加上无效的选项。你是对的!现在是没有错误的,但是,当我进入时,什么也不会发生https://somesite.com/users.php?user=AlexOh,如果我访问https://somesite.com/Alex/! 但是,如果我访问https://somesite.com/users.php?user=Alex URL保持不变,当我访问时怎么办https://somesite.com/users.php?user=Alex 取代https://somesite.com/Alex/?Worked! 我将index.php改为users.php。但是,当我进入时该怎么办https://somesite.com/users.php?q=Alexchange 指向的URLhttps://somesite.com/Alex/? 谢谢兄弟。
<?php

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


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

?>