Windows 10+XAMPP环境下.htaccess规则测试相关问询
嘿,我来帮你搞定在Windows 10的XAMPP环境里测试.htaccess规则的事儿,还有你那半拉子重定向规则的问题~
1. 你的基础.htaccess规则详解
首先,你在C:\xampp\htdocs\website下的完整规则我给你格式化好了:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
每个部分的作用给你拆解下:
RewriteEngine On:开启Apache的URL重写引擎,这是所有重写规则的前提RewriteCond %{REQUEST_FILENAME} !-f:判断请求的路径不是一个真实存在的文件RewriteCond %{REQUEST_FILENAME} !-d:判断请求的路径不是一个真实存在的目录RewriteRule ^(.*)$ index.php/$1 [L]:把所有符合上面两个条件的请求,转发到index.php并带上原请求的路径,[L]表示这是最后一条规则,匹配后就停止后续规则的处理
2. 确保规则生效的关键配置
要让.htaccess生效,你得先确认XAMPP的Apache配置对了:
- 开启mod_rewrite模块:
打开XAMPP控制面板,点击Apache的「Config」按钮,选择httpd.conf文件。找到这一行:
把前面的#LoadModule rewrite_module modules/mod_rewrite.so#去掉,保存文件后重启Apache。 - 设置目录的AllowOverride权限:
同样在httpd.conf里,找到对应website目录的<Directory>块(如果没有就自己加一个):
把<Directory "C:/xampp/htdocs/website"> AllowOverride All Require all granted </Directory>AllowOverride None改成AllowOverride All,保存后重启Apache——这一步是让Apache允许该目录下的.htaccess文件覆盖全局配置。
3. 验证规则是否生效的简单方法
不用加未完成的规则,咱们用个简单的测试:
- 在
website目录下创建index.php,内容写:<?php echo "当前请求路径:" . $_SERVER['REQUEST_URI']; ?> - 访问
http://localhost/website/foo/bar/baz(随便写个不存在的路径),如果页面输出当前请求路径:/website/foo/bar/baz,说明规则已经生效了——因为这个不存在的路径被转发到了index.php。
4. 你那半拉子重定向规则的问题
你后面加的RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ in...有几个坑:
- 重复写
RewriteEngine On:虽然不会直接报错,但完全没必要,整个.htaccess文件里写一次就够了 - 规则未完成:
RewriteRule的目标路径没写完,Apache会直接报语法错误,你可以去XAMPP的Apache错误日志(控制面板→Apache→Logs→Error Log)里看到具体提示 - 如果是想测试重定向,比如把所有非文件/目录的请求临时重定向到
index.html,可以写成完整的规则:
用# 已经开启过RewriteEngine On,不用重复写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.html [R=302,L]R=302表示临时重定向,方便测试,确认生效后再改成R=301永久重定向(如果需要)。
内容的提问来源于stack exchange,提问作者TheOrdinaryGeek
相关产品推荐
相关产品推荐

