xampp 上 .htaccess 文件的奇怪行为

Posted

技术标签:

【中文标题】xampp 上 .htaccess 文件的奇怪行为【英文标题】:Strange behavior of .htaccess file on xampp 【发布时间】:2015-12-09 18:36:32 【问题描述】:

我正在尝试使用 .htaccess 文件来更改和清理 URL。 我的测试站点在xampp 服务器上,我使用virtualHost 进行了配置。 这是我的虚拟主机设置: httpd

Alias /MySite "C:/xampp/htdocs/MySite"
    <Directory "C:/xampp/htdocs/MySite">
        Options All
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

vhost

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin myMail@gmail.com
    DocumentRoot "C:/xampp/htdocs/MySite"
    ServerName MySite
    ErrorLog "logs/MySiteErrorLog.log"
    CustomLog "logs/MySiteCustomLog.log" common
</VirtualHost>

当我在.htaccess 文件中使用非常简单的命令时,对 URL 没有影响,但如果我尝试一些错误的代码,我会得到 Error 500

你能帮我理解为什么会这样吗? 我的设置有什么问题吗?

更新: 这是我的网站结构:

MySiteRoot
  |
  |
   php //directory
      |
      Assets  //directory
      classes //directory
      pages   //directory
      parts   //directory
      .htaccess //file
      index.php //file

这是.htaccess 文件中的一个简单测试:

RewriteEngine On
RewriteRule ^([^/]*)/$ /mySite/PHP/index.php?page=$1 [L]

这些图像将更好地描述:

在这两种情况下 url 是相同的,没有错误或什么的

在此先感谢...

【问题讨论】:

基本配置看起来很合理。 .htaccess 文件中有什么内容以及您使用哪些网址来测试它是否有效? @SteveE。感谢您的回复。我确实更新了这个问题。请看... 【参考方案1】:

您需要将.htaccess 放在C:/xampp/htdocs/MySite 中,而不是放在像PHP 这样的任何子目录中。你可以在C:/xampp/htdocs/MySit/.htaccess使用这条规则:

RewriteEngine On

# If the request is not for a valid directory
RewriteCond %REQUEST_FILENAME !-d
# If the request is not for a valid file
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^/]+)/$ PHP/index.php?page=$1 [L,QSA]

【讨论】:

感谢您的回答。我之前做过测试,将.htaccess文件放在根文件夹中时没有区别。我根据您的建议更改了文件位置和代码,问题仍然存在...... 我没有收到错误。事实上,就像没有 htaccess 文件一样,没有任何影响。当我输入错误的规则时,我会得到错误,这很正常,但是当我编写规则时,没有任何影响...... :-|是的,mod_rewrite 已启用... 我会访问 index.php 文件,这个文件是前端控制器,当我点击这个页面中的一个链接时,该链接将根据链接目标生成 queryString 并创建 url.. . 我确实测试了上述两个 URL 并且有 404 错误 ---> object not found !!! 不,我告诉过,url do not 改变,浏览器会正确显示页面,但使用旧 URL,没有错误.... 没错,这就是重点。但是,我使用.htaccess 文件访问第一个文件并创建第二个文件,我确实从我的站点中删除了.htaccess...正如您所见,这些是相同的,而且似乎htaccess 根本没有影响。但是当我在.htaccess 文件中输入随机文本时,我会收到错误 500,表明 htaccess 正在使用中...【参考方案2】:

我认为您的重写规则存在问题,它仅匹配以斜杠结尾的请求。假设

.htaccess 文件位于您的网络根目录中 您正在尝试将所有内容匹配到第一个可选的正斜杠并将其传递给 PHP

那么这应该可以工作:

RewriteEngine On
# If the request is not for a valid directory
RewriteCond %REQUEST_FILENAME !-d
# If the request is not for a valid file
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^/]+) PHP/index.php?page=$1 [L,QSA]

将此添加到您的虚拟主机(apache 2.4.x)中将启用重写调试

<VirtualHost *:80>
    ... existing config
    LogLevel alert rewrite:trace3 
</VirtualHost>

如果它有效,那么您将在新的日志文件中得到输出,解释 Rewrite 正在做什么

【讨论】:

也谢谢你,但这段代码再次没有影响......我确实测试了很多不同的规则......我将我的问题命名为strange behavior因为这个:) 好的,Rewrite 没有达到你的预期。你试过登录吗?我已更新原始答案以包含这些步骤。 是的,你是对的。当我根据您的回答将此命令添加到我的 vHost 时,xampp 将无法正确启动并显示一个错误,指出出现问题。我正在使用 xamp 3.2.1。尽管我在像***.com/questions/13937449/… 这样的搜索中发现了很多,但我必须根据我的版本编写一个新命令。你能告诉我开始RewriteLog有什么问题吗?再次感谢... 我认为您使用的是 cpanel 3.2.1,因为我找不到 3.2.1 版本的 XAMP。我已经更新了上面的答案以获得 apache 2.4.x 的日志记录配置。它将记录到“logs/MySiteErrorLog.log”[httpd.apache.org/docs/current/mod/mod_rewrite.html]

以上是关于xampp 上 .htaccess 文件的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

wp_enqueue_script 在本地 xampp 安装上的奇怪行为

htaccess apache mod_rewrite & authentication:奇怪的行为

XAMPP 本地服务器上的 Htaccess 用于测试

XAMPP/Apache 文件夹中的 .htaccess 未找到错误 404

.htaccess 在 Xampp localhost 服务器上不起作用

C:/xampp/htdocs/.htaccess: RewriteRule: 错误标志分隔符 - XAMPP/Windows