Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache $\u获取空变量。htaccess重写_Apache_.htaccess - Fatal编程技术网

Apache $\u获取空变量。htaccess重写

Apache $\u获取空变量。htaccess重写,apache,.htaccess,Apache,.htaccess,https://website.com/api/somefolder/test/512/31 应重写为: https://website.com/api/somefolder/test.php?param1=512¶m2=31 及 https://website.com/api/somefolder/anotherfolder/hello/yo/44 应重写为: https://website.com/api/somefolder/anotherfolder/hello.php?para

https://website.com/api/somefolder/test/512/31

应重写为:
https://website.com/api/somefolder/test.php?param1=512¶m2=31

https://website.com/api/somefolder/anotherfolder/hello/yo/44

应重写为:
https://website.com/api/somefolder/anotherfolder/hello.php?param1=yo¶m2=44

RewriteEngine On

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php?param1=$1&param2=$2 [QSA,L]
重写工作正常,但$1和$2为空。知道为什么吗


我的htaccess文件位于api目录中。

当然,这两个参数是空的,因为您从未用内容填充它们

请看一看该示例:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.+)/(\d+)/(\d+)$
RewriteCond %1.php -f
RewriteRule ^ %1.php?param1=%2&param2=%3 [QSA,END]
如果您使用上述规则收到一个内部服务器错误(http状态500),那么很可能您操作的是非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到不支持的
[END]
标志的明确提示。您可以尝试升级或使用较旧的
[L]
标志,在这种情况下可能也会使用相同的标志,不过这取决于您的设置

此实现将在http服务器主机配置或分布式配置文件(“.htaccess”文件)中同样工作。显然,重写模块需要在http服务器中加载,并在http主机中启用。在使用分布式配置文件的情况下,您需要注意在主机配置中启用该文件的解释,并且该文件位于主机的
DOCUMENT\u ROOT
文件夹中


还有一个一般性的注释:您应该总是更喜欢将这些规则放在http服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实降低了http服务器的速度。只有在您无法访问真正的http服务器主机配置(读:真正廉价的服务提供商)或坚持编写自己的规则的应用程序(这显然是一个安全噩梦)的情况下,才提供它们作为最后一个选项

您可以在
api/.htaccess
中使用此规则,顶部的
选项-MultiViews
关闭Apache的内容协商服务:

Options -MultiViews
RewriteEngine On
RewriteBase /api/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/([^/]+)/([^/]+)/?$ $1.php?param1=$2&param2=$3 [QSA,NC,L]

我得到一个404找不到你提供的代码错误。我将继续测试,看看我是否能解决它。嗯,我不确定问题是什么。这可能与我的根目录中有一个不同的htaccess文件,而这个htaccess在api目录中有关吗?这肯定会引起问题。将配置逻辑扩展到几个地方很少是一个好主意。我在根目录中有一个主要的htaccess。但是,我希望为子目录api提供一个单独的htaccess。所以这个htaccess在api中,我在尝试访问test.php以外的页面时,代码中也出现了404错误。我希望重写规则适用于api下的所有PHP页面。不幸的是,我的代码也出现了404错误。唯一没有给出404的重写规则是我在问题中遇到的。是否有一种方法可以使用除附加参数之外的其他参数?请原谅我对htaccess的无知。通过我的代码,我可以导航到test.php,而无需文件扩展名(test)。当我清空htaccess文件时,当导航到同一个没有扩展名的文件时,我会得到404(test)。