首页 > 解决方案 > 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) 是空的。

标签: phpregex.htaccessmod-rewrite

解决方案


您需要捕获更多字符[\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() );

推荐阅读