为了账号安全,请及时绑定邮箱和手机立即绑定

RewriteEngine URL 到 php _get 参数

RewriteEngine URL 到 php _get 参数

PHP
大话西游666 2021-07-15 14:07:37
在我的网站上,我想在内部执行一个像mydomain.com/dir/testasmydomain.com/dir/process.php?arg=test我已经在文件夹“dir”中创建了一个 htaccess 文件,当我尝试访问时mydomain.com/dir/test,它显示 的页面process.php,但是当我尝试访问时$_GET["arg"],它不包含字符串,test而是包含字符串process.php。我的.htaccess:RewriteEngine OnRewriteRule ^(.*)$ process.php?arg=$1 [L]
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

结果的原因是重写循环。您尝试通过使用[L]标志来停止重写过程,但正如您错过的许多其他人一样,您了解该标志的实际作用。它并没有结束重写的过程,但只有该进程的当前运行。在您的情况下,重写过程开始另一次运行并再次重写您已经重写的请求。在第二次运行中,模式^(.*)$与您在第一次运行中重写的内容相匹配,这解释了您的结果。


您有两种选择来解决这个问题。


1)使用条件来防止第二次重写运行:


RewriteEngine On

RewriteCond %{REQEUEST_URI} !/process\.php$

RewriteRule ^(.*)$ process.php?arg=$1 [L]

2) 使用END较新版本的 apache http 服务器提供的标志:


RewriteEngine On

RewriteRule ^(.*)$ process.php?arg=$1 [END]

如果您使用上面的第二条规则收到内部服务器错误(http 状态 500),那么您可能运行的是非常旧版本的 apache http 服务器。[END]在这种情况下,您将在 http 服务器错误日志文件中看到对不受支持标志的明确提示。


还有一个一般性的评论:你应该总是喜欢将这样的规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是意外行为的原因,难以调试,而且它们确实会降低 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。


查看完整回答
反对 回复 2021-07-16
  • 1 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信