Php 试图获得一个友好的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: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
但是,如果我访问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";
}
?>