我正在尝试隐藏部分网址并仅显示目录等变量。
例如:从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.
答案 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";
}
?>