【发布时间】:2017-01-01 21:36:57
【问题描述】:
所以,我对 Apache config 或 .htaccess 重写规则不太擅长……而且我正在尝试对我的本地主机服务器的工作方式进行一些修改……
我正在尝试对任何带有扩展名“.php”的请求返回 404 错误。如果 uri 没有扩展名,则将请求路由到“ini.php”。如果 uri 包含不是 '.php' 的扩展名,那么它应该按照正常程序获取文件。
我现在拥有的:
Rewrite Engine on
DirectorySlash off
RewriteCond $1 (.php)
RewriteRule ^(.*)$ - [L,NC,R=404]
RewriteCond $1 !^(.+)
RewriteRule ^(.*)$ ini.php [L,NC]
我的逻辑是,如果它不是 .php,并且没有扩展名,则将其路由到 ini.php。否则它应该正常路由。
现在看起来 .php 规则正在返回 404 错误。但是,如果收到对没有扩展名的路径的请求,它会尝试路由到 ini.php 并点击 404 页面。是否可能像第二条规则一样处理然后达到第一条规则?
无论如何,有人可以帮我整理一下并给我一些指导吗?我尝试了谷歌和一堆不同的解决方案,但我找不到适合这种情况的东西......
更新: 我将代码更改为以下,并将 ini.php 添加到 httpd 中的 DirectoryIndex 设置:
RewriteEngine on
RewriteCond %{REQUEST_URI} (\.[php^\\/]+)$
RewriteRule ^(.*)$ - [L,NC,R=404]
RewriteCond %{REQUEST_URI} !(\.[^\\/]+)$
RewriteRule ^.+$ / [L,NC]
你能检查一下它看起来还好吗?
我再次打开了 DirectorySlash。谢谢。
【问题讨论】:
标签: php apache .htaccess mod-rewrite url-rewriting