Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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
Php .htaccess->;重写strtolower不';当我上传到网络主机时无法工作_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php .htaccess->;重写strtolower不';当我上传到网络主机时无法工作

Php .htaccess->;重写strtolower不';当我上传到网络主机时无法工作,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,好的,我再次发布了一个我必须自己回答的问题,因为我在任何地方都找不到它 我在写一个.htaccess文件,强制所有字符都使用小写。我找到了这个似乎很好的解决方案: 除了文件名和变量名非常笨拙之外。我必须解决这个问题。因此,我尝试创建自己的文件版本,并将文件名从“rewrite strtolower”重命名为“lowercase”,变量名从“rewrite strtolower url”重命名为“address”。我在我的家庭服务器上测试了它们,结果很好:一切正常 不幸的是,当我试图上传到我的主

好的,我再次发布了一个我必须自己回答的问题,因为我在任何地方都找不到它

我在写一个.htaccess文件,强制所有字符都使用小写。我找到了这个似乎很好的解决方案:

除了文件名和变量名非常笨拙之外。我必须解决这个问题。因此,我尝试创建自己的文件版本,并将文件名从“rewrite strtolower”重命名为“lowercase”,变量名从“rewrite strtolower url”重命名为“address”。我在我的家庭服务器上测试了它们,结果很好:一切正常

不幸的是,当我试图上传到我的主机,他们没有工作

什么?代码看起来很完美。它在我的家庭服务器上工作。。。为什么不是他们的?在逐行检查我的代码并确定它应该是完美的之后,我联系了我的主机,询问他们是否有一些设置需要调整

他们说没有,当然,一个技术人员很好地运行了我运行的教程,但是当他运行它时,他的版本工作了!怎样!?我将他的版本与我的版本进行了很长时间的比较,得出的结论是唯一的区别在于我们使用的变量名和文件名——他从教程中复制了精确的文件名和变量名

以下是my.htaccess和lowercase.php文件的(相关)内容。。。你能发现我的错误吗

.htaccess:

Options +FollowSymLinks
ErrorDocument 404 /notfound.php
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(img|css) [NC]
RewriteCond %{REQUEST_URI} [A-Z]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) lowercase.php?address=$1 [QSA,L]
Options+FollowSymLinks
ErrorDocument 404/notfound.php
全盘否定
重新启动发动机
重写基/
重写cond%{REQUEST_URI}!(img | css)[NC]
重写cond%{REQUEST_URI}[A-Z]
重写cond%{REQUEST_FILENAME}-s
重写规则(.*)lowercase.php?地址=$1[QSA,L]
lowercase.php:

<!--
Copyright (C) 2017 Peace Seeker

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

See the GNU General Public License for more details.  
<http://www.gnu.org/licenses/>

DISCLAIMER: USER CONTENT IS LICENSED BY INDIVIDUAL CONTRIBUTORS. ONLY THE CODE STRUCTURES OF THIS FILE AND ALL MATERIALS PUBLISHED BY LUCAS MCDONALD aka AISO IPPUDU MILELE aka TRANSIENT ANIMA ARE COPYRIGHTED (i.e., COPYLEFTED) BY THIS AGREEMENT. ALL OTHER CONTENT IS OWNED BY THE CONTRIBUTORS WHO CONTRIBUTED IT.
-->

<?php
if(isset($_GET['address'])) {
    $url = $_GET['address'];
    unset($_GET['address']);
    $params = http_build_query($_GET);
    if(strlen($params)) {
        $params = '?' . $params;
    }
    header('Location: http://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
    exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');
?>


这段代码在我的家庭服务器上工作,但在web服务器上不工作。。。有什么问题吗?是否有一种语法已被弃用?如果找不到问题,请向下滚动至我的答案。:)

问题实际上是评论。出于某种我还不知道的原因,PHP代码之前的HTML5注释将破坏.htaccess在我的web主机服务器上运行lowercase.PHP文件的努力,而不是在我的家庭服务器上。。。然而,如果我只是将注释移到PHP代码下面,一切都很好

如果有人能告诉我为什么HTML5注释可以放在PHP代码之前,比如说,在一个包含大量HTML5代码的.PHP文件中,但有时不允许放在只有PHP代码的.PHP文件中(或者可能不允许放在将由.htaccess调用的.PHP文件中),从而改进这个答案,我很乐意了解有关这个问题的一些细节


(正如Croises在评论中提到的,显然这些评论不能放在PHP标题之前。我仍然不完全理解为什么…

你不能在标题之前发送html代码(比如评论)。你知道为什么在我的家庭服务器上这样做吗?因为在我的家庭服务器版本的文件中,我对所有PHP代码都有注释,而且它完全响应了…您可以在PHP之前发送html代码,但不能在头之前发送。