尝试为项目构建自己的社交媒体。 我在profile.php上有一个php脚本,它在用户数据库中查询“id”或自定义“/my.user”url。 当我在url中输入它时,我希望它像:mysite.com/my.user它使用此代码:
RewriteRule ^/?(.+)/?$ ./profile.php?u=$1 [QSA,L]
但是htaccess不允许我输入配置文件的“id”,所以mysite.com/20例如不起作用。 我尝试了另一个htaccess代码,但其工作方式与上面相同:
RewriteRule ^/?([a-zA-Z0-9\-=&_@\.]+)/?$ profile.php?u=$1 [QSA,L]
所以要清理一下;
我希望能够解决这个问题:
我该怎么办?
完整.htaccess代码:
AddDefaultCharset UTF-8
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Options +FollowSymLinks
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^./profile.php
RewriteRule ^/?(.+)/?$ ./profile.php?u=$1 [QSA,L]
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
现在发生的事情是mysite.com/my.user(特殊用户网址)正在运行,但如果用户没有点,例如mysite.com/myuser,则不行。然后它尝试获取不存在的myuser.php。 此外,当我从“my.user”输入“id”时,例如:mysite.com/20,它只是说“找不到个人资料”,所以会发生一些事情。
这是profile.php查询代码:
$profile = mysqli_real_escape_string($mysqli, $_GET['u']);
if (filter_var($profile, FILTER_VALIDATE_INT) == true) {
$query = "SELECT * FROM UserProfile, Location WHERE UserProfile.id = '$profile' AND Location.id = '$profile'";
} else {
$queryurl = "SELECT id FROM UserProfile WHERE UserProfile.ProfileUrl = '$profile'";
if ($result2 = $mysqli->query($queryurl)) {
while ($row2 = $result2->fetch_assoc()) {
$userid = $row2['id'];
}
}
$query = "SELECT * FROM UserProfile, Location WHERE UserProfile.ProfileUrl = '$profile' AND Location.id = '$userid'";
$result2->free();
}
最好的问候,Erik。
答案 0 :(得分:0)
发生的事情是你的第一条规则匹配任何不存在的uri并将其重写为/uri.php,这样你的第二条规则永远不会被触发。
更改
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [NC,L]
要
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$ $1.php [NC,L]
所以规则只能匹配现有的php文件。