Apache URL重写需求:移除index.php及查询字符串
解决.htaccess URL重写问题
你需要将https://test.com/myko这类简洁URL重写到index.php?code=myko,同时避免把index.php本身作为参数值。你的原有规则问题在于匹配了所有请求(包括index.php自身),导致出现错误参数。
以下是正确的.htaccess规则:
RewriteEngine On # 排除真实存在的文件和目录,避免影响静态资源或真实页面访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配根目录下的单个路径段,重写到带code参数的index.php RewriteRule ^([^/]+)$ index.php?code=$1 [L]
规则说明:
RewriteCond %{REQUEST_FILENAME} !-f:如果请求的不是服务器上真实存在的文件(比如index.php、静态资源文件),才执行后续重写规则RewriteCond %{REQUEST_FILENAME} !-d:同理,排除真实存在的目录访问RewriteRule ^([^/]+)$ index.php?code=$1 [L]:匹配根目录下不含斜杠的字符串(比如myko),将其作为code参数传入index.php,[L]表示终止后续规则处理
如果需要支持多级路径(比如https://test.com/user/myko要转换为code=user/myko),可以把最后一行规则改为:
RewriteRule ^(.*)$ index.php?code=$1 [L]
注意事项:
- 确保服务器已开启
mod_rewrite模块 - 网站根目录的Apache配置中需设置
AllowOverride All,否则.htaccess规则无法生效 - 测试前清空浏览器缓存,避免旧缓存干扰结果
内容的提问来源于stack exchange,提问作者Kobus Myburgh
相关产品推荐
相关产品推荐

