php - mod_rewrite 不适用于没有文件扩展名的查询字符串
问题描述
我正在尝试用 in 将 user/John-Doe 重写为user ? name =John-Doe。我的.htaccess与我正在重写/重定向的文件位于同一目录中。这是htaccess中的代码:mod_rewrite
.htaccess
RewriteEngine on
RewriteRule ^user/(\w+)/?$ user?name=$1
现在我没有收到来自 $_GET['name'] 的任何数据,并且 var_dump($_GET) 是空的。
解决方案
您需要捕获更多字符[\w-]+
此外,您的请求user?name=$1
应该是user.php?name=$1
?
.htaccess
<IfModule mod_rewrite.c> # Check if mod_rewrite if avaible
RewriteEngine on
RewriteRule ^user/([\w-]+)/?$ user.php?name=$1
</IfModule>
user.php
<?php
var_dump($_GET);
array(1) { ["name"]=> string(8) "John-Doe" }
测试示例
https://regex101.com/r/up32vA/1
还要检查mod_rewrite
你的服务器是否启用,一个简单的方法是把它放在 index.php
print_r( apache_get_modules() );
推荐阅读
- c# - 使用 c# 桌面应用程序在默认浏览器中设置 cookie
- regex - 其他带有正则表达式的文件
- angular - 将提供者添加到提供者数组不起作用
- opengl - 为什么没有适用于 Linux 的屏幕变形软件以及如何解决?
- python - 针对不同的问题给予不同的分数
- r - 为什么保存后无法使用 RDS 文件?
- java - Java: super() 不是在第一行可能吗?
- javascript - 闪电组件和 window.addEventListener()
- git - 无法将初始提交从远程仓库推送到新的 github 仓库
- docker - 具有不同容器操作系统和主机操作系统的 Docker