php - 如何使用 htaccess 和 php 避免错误变量
问题描述
大家好,我是stackoverflow的新手,所以这是我的问题
我有一个控制器文件 php 和我的 htaccess
如果有这个 php 控制器
if ($_GET['var1'] and $_GET['var2']){include_once('file.php')}
和这个 htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ /controller.php?id=$1 [QSA,L]
我的问题是
如果我输入www.site.com/var1/var2/ 这是一条真实的路径,那么可以。但是如果我输入www.site.com/var1/var2/hjwuwjais/ 这个 url 需要显示错误 404 但仍然显示 file.php 因为有 var1 和 var2 ..
-------------real-real-non-exist--
www.site.com/var1/var2/hjwuwjais/
那么我该如何解决...如果我在 url 显示 404 中键入任何错误或不存在的 var?
解决方案
填补您的问题中缺少的空白,也许您应该只在您有两个路径段时才重写您的控制器?
例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+/[^/]+/?)$ /controller.php?id=$1 [QSA,L]
因此,只有形式的请求/<something>/<something>/
(尾随斜杠可选)被路由到您的控制器。其他任何东西都会自然地落入404(除非它碰巧映射到物理文件)。
这会处理一个可选的尾部斜杠,尽管理想情况下您应该在 URL 中包含或省略它。
如果您对正则表达式有更多限制,那么您可能可以避免文件系统检查。
顺便说一句,在您原来的 regex^(.*)/?$
中,尾随/?
是完全多余的,因为捕获子.*
模式是greedy。
更新:
但是如果我输入
www.example.com/var1/var2/hjwuwjais/
这个 url 需要显示错误 404 但仍然显示file.php
因为有var1
和var2
。
啊,好的,这似乎会使我上面的答案不正确。但这也与此无关.htaccess
?正如评论中所指出的,这并没有真正的意义。(?)
在旁边:
如果有这个 php 控制器
if ($_GET['var1'] and $_GET['var2']){include_once('file.php')}
我认为这是非常类似于伪的代码......$_GET['var1']
从哪里来$_GET['var2']
?你只是传递$_GET['id']
给controller.php
?
推荐阅读
- c - c中的Exec函数在它应该返回时没有返回-1
- javascript - React Side bar - 导航类似于提供的链接
- python - 我正在编写一个 Python 加密程序,它会随着时间改变符号的值,任何想法如何开始
- c# - How to read binary files until EOF in C#
- c++ - How to increase the exponents using loops?
- jquery - JqGrid 获取列值
- javascript - 如何创建一个在不同时间执行 3 种不同功能的下一个按钮?
- sql-server - 如何在.net中执行动态SQL?
- .htaccess - htaccess 中的简单 rewritecond 无法按预期工作
- vba - 计算 TO 字段中的 VBA 收件人数