我正在尝试制作 Instagram 或 Facebook 等社交平台,并希望向用户显示用户名,例如 examplesite.com/usernamehere 等网址。我一直在研究如何做到这一点,我了解到它是使用 htaccess 重写代码制作的。我有一个代码
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ user.php?url=$1 [QSA,L]
它通常可以正常工作,但例如当我想进入 examplesite.com/login 或注册页面时,rewriterules 认为 login 或 register 一词是用户名,因此永远不会打开。文件夹必须打开,并且 css、scss、js、img 等。我服务器上的文件夹必须作为用户名,因此如果有人将 examplesite.com/css、img 或 js 等单词写入 url,则不应打开 css、img 或 js 文件。
抱歉我的英语不好。谢谢大家!<3
答案1
有很多不同的事情:
不要使用.htaccess
文件
文件中有许多善意的代码示例.htaccess
,然后被一次又一次地复制货物崇拜系统管理员 那应该阅读实际的手册。
从:https://httpd.apache.org/docs/2.4/howto/htaccess.html
一般情况下,您只应
.htaccess
在无法访问主服务器配置文件时使用文件。例如,人们普遍误以为用户身份验证应始终在 .htaccess 文件中进行,而近年来,另一个误解是 mod_rewrite 指令必须进入.htaccess
文件。事实并非如此。
……
就 RewriteRule 指令而言,在.htaccess
上下文中每次对目录发出请求时都必须重新编译这些正则表达式,而在主服务器配置上下文中,它们只需编译一次并缓存。此外,规则本身也更加复杂,因为必须解决每个目录上下文和 mod_rewrite 带来的限制。请参阅重写指南 了解有关此主题的更多详细信息。
第二:
您已经提到了几个应该从example.com/[user-alias]
映射中排除的目录名称。
不要忘记在注册页面中禁止人们故意选择这些目录(和其他)名称作为他们的用户别名。
最后的
RewriteCond
指令用于限制受下列指令约束的请求类型RewriteRule
。
RewriteRule
您的配置目前用“简单”的英语表示,当存在与请求中的文件名组件同名的现有文件或目录时,不要应用以下内容。
您只需使用额外的行添加额外的条件即可RewriteCond
,例如:
RewriteCond %{REQUEST_FILENAME} !"login"
应该排除example.com/login