问题描述
我正在尝试使用 mod_rewrite
中的 .htaccess
将 user/John-Doe 重写为 user?name=John-Doe。我将 .htaccess 与我正在重写/重定向的文件位于同一目录中。这是 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() );