无法编写正确的.htaccess文件实现URL重定向求助
解决Apache下隐藏URL子目录及.php后缀的问题
针对你的场景,我来帮你修正.htaccess的配置,解决之前的500错误并实现URL美化的需求。
首先,先分析你之前的配置为什么会触发500错误:你的规则RewriteRule ^(.*)$ application/controllers/$1 [L]没有做任何过滤,会导致重写循环——当请求/index时,规则会把它重写到application/controllers/index,而Apache会继续对这个新路径应用重写规则,再次匹配^(.*)$,反复重写直到达到Apache的重写次数上限,最终返回500错误。
正确的.htaccess配置(放在网站根目录/Allutas下)
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 跳过实际存在的文件和目录,避免循环和影响静态资源 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将单段URL重写到Application/Controllers下的对应.php文件 RewriteRule ^([^/]+)$ Application/Controllers/$1.php [L] # 处理根目录请求,直接指向index.php RewriteRule ^$ Application/Controllers/index.php [L] </IfModule>
配置说明
RewriteBase /:明确重写规则基于网站根目录,避免路径解析混乱(尤其是在子目录部署的场景下)。RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d:这两个条件是关键——它们告诉Apache:如果请求的是实际存在的文件或目录,就不要应用后续的重写规则。这样既避免了重写循环,也不会影响图片、CSS、JS等静态资源的访问。RewriteRule ^([^/]+)$ Application/Controllers/$1.php [L]:匹配类似/index、/about这样的单段URL,将其映射到Application/Controllers/index.php、Application/Controllers/about.php。[^/]+确保只匹配单个路径段,[L]表示这是最后一条规则,处理完就停止后续重写。RewriteRule ^$ Application/Controllers/index.php [L]:单独处理根目录的请求(http://allutas.com/),直接指向你的首页控制器。
注意事项
- 目录大小写:你的目录是
Application/Controllers(首字母大写),所以规则里必须和实际目录名一致——如果用小写的application/controllers,在区分大小写的Linux主机上会找不到文件,导致404错误。 - mod_rewrite启用:确保你的Apache主机已经开启了
mod_rewrite模块(Apache2.4默认是开启的,如果没开,需要联系主机商启用)。 - 测试验证:配置完成后,访问
http://allutas.com/index、http://allutas.com/about应该能正常对应到目标PHP文件,根目录访问也会正常跳转。 - 错误排查:如果还是出现500错误,可以查看Apache的错误日志(主机控制面板一般能找到),日志里会明确说明错误原因(比如重写循环、目录权限问题等)。
内容的提问来源于stack exchange,提问作者Omar Abdo
相关产品推荐
相关产品推荐

