尝试为项目构建自己的社交媒体。我在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]
所以要把事情弄清楚;
- 这项工作:mysite.com/my.user
- 这不是:mysite.com/20或mysite.com/myuser
我希望这个工作:
- mysite.com/20
- mysite.com/my.user
我该怎么办?
完整.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(特殊用户url)正在工作,但如果用户没有点,则不会工作,比如mysite.com/myuser。然后它试图获取不存在的myuser.php。此外,当我从"my.user"(如:mysite.com/20)中输入"id"时,它只显示"找不到个人资料",因此会发生一些事情。
这是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();
}
致以最良好的问候,埃里克。
发生的情况是,您的第一个规则匹配任何不存在的uri,并将其重写为/ui.php,这样您的第二个规则就永远不会被触发。
更改
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [NC,L]
至
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$ $1.php [NC,L]
因此该规则只能匹配现有的php文件。