【发布时间】:2020-08-04 23:28:40
【问题描述】:
我正在尝试为个人资料页面编写.htaccess RewriteRule。我希望规则查询用户配置文件的 SQL 数据库,如果该数据返回结果以加载 profile.php 页面。示例:
www.example.com/username- 或
www.example.com/user.name - 或
www.example.com/user.name123等...
但是,我还有其他页面,例如 /login、/registration、/、/chat 等等。每次我尝试某些东西时,我都会遇到问题。
我尝试了以下方法:
RewriteEngine On
RewriteRule ^(login)$ login.php [QSA]
RewriteRule ^(logout)$ logout.php [QSA]
RewriteRule ^([\w-]+)/?$ profile.php?pid=$1 [L,QSA]
我正在尝试尽可能多地学习,但我不理解正则表达式的语法和条件。上面的规则让我可以使用之前的所有页面,但它会捕获profile.php 页面中的所有其他内容。我做错了什么?
【问题讨论】:
-
我不明白你,你是想在 htaccess 中执行 SQL 吗?或者你想在那个页面上允许一个 sql 查询?
-
@Nix,感谢您的回复。如果我没有解释清楚,我很抱歉。所以,我想要做的是使用配置文件名称('username'、'user.name' 等)来执行查询。如果查询有 0 返回以显示 404 页面,除非该页面确实存在。示例:(登录指向 login.php,但阳光指向任何内容,robert.sexton 应该显示给我。)。我不善于沟通所以,如果我解释得不好,我会尽力而为。
-
你在这里缺少 RewriteCond,你为什么不通过你的 php 代码来实现呢?在页面顶部您可以执行查询,如果结果为空,您可以回显 404 并退出进一步处理
-
@Nix,在你提出问题后我也在想同样的事情。我想我可以使用查询,如果它返回 0,我可以让 PHP 标头重定向。规则 RewriteRule ^([\w-]+)/?$ profile.php?pid=$1 [L,QSA] 确实有效,但它不能获取所有字符。我只能用一个词来完成所有工作,比如 user.name、user.name123 等。我在看这里:httpd.apache.org/docs/2.4/rewrite/intro.html 和 hostwinds.com/guide/defining-regex-characters-htaccess
-
@Nix,我想我明白了。你能验证一下吗?我正在使用这个: RewriteRule ^([\w-.*]+)/?$ profile.php?pid=$1 [L,QSA]