mod_rewrite 不适用于没有文件扩展名的查询字符串

问题描述

我正在尝试使用 mod_rewrite 中的 .htaccessuser/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() );