好的,我再次发布了一个我必须自己回答的问题,因为我无法在任何地方找到它。
我正在写一个.htaccess文件来强制所有字符小写。我找到了这个解决方案,看起来不错:
https://www.simonholywell.com/post/2012/11/force-lowercase-urls-rewrite-php/
除了文件名和变量名称都非常难以处理。我必须解决这个问题。所以我尝试制作我自己的文件版本,并重命名文件名为" rewrite-strtolower"到"小写"和#34;的重写名称:rewrite-strtolower-url"到"地址"。我在我的家庭服务器上测试了它们,结果很漂亮:一切正常!
不幸的是,当我尝试将它们上传到我的主机时,它们无法正常工作。
什么?代码看起来很完美。它在我的家庭服务器上工作......他们为什么不这样做?在逐行浏览我的代码并确定它应该是完美的之后,我联系了我的主持人并询问是否有一些设置他们必须在他们的结尾进行调整。
当然,他们说不,并且有一位技术人员非常友好地运行我运行的教程,但是当他运行它时,他的版本工作了!怎么样!?我将他的版本与我的版本进行了长时间的比较,并得出结论,唯一的区别是我们使用的变量名和文件名 - 他从教程中复制了精确的文件名和变量名。
以下是我的.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]
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服务器上运行......可能是什么问题?有没有被弃用的语法?如果找不到问题,请向下滚动到我的答案。 :)
答案 0 :(得分:0)
问题实际上是评论。由于某些原因,我仍然不知道,HTML5注释之前,PHP代码将破坏.htaccess在我的Web主机服务器上运行我的lowercase.php文件的努力,但不能在我的家庭服务器上...但是,如果我只是简单地将注释移到PHP代码下面,一切都很好!
如果有人可以通过告诉我为什么HTML5注释允许在PHP代码之前,比如一个包含大量HTML5代码的.php文件,但有时不允许在其中一个只有PHP代码的.php文件(或者也许不允许在.htaccess中调用的.php文件中),我很乐意学习这个问题的一些细节!
(正如Croises评论中提到的,显然评论根本不能在PHP标题之前。我仍然不完全理解为什么......)