Apache 重写到新文件夹不起作用(适用于现有文件夹)

Posted

技术标签:

【中文标题】Apache 重写到新文件夹不起作用(适用于现有文件夹)【英文标题】:Apache Rewrite to new folder not working (works for existing folders) 【发布时间】:2014-01-25 20:01:55 【问题描述】:

我有一个这样的 .htaccess 文件:

RewriteEngine On

RewriteBase /

RewriteCond %HTTP_HOST ^.*da.com$ [NC]
RewriteCond %REQUEST_URI !^/html2/    
RewriteRule ^(.*)$ /thedavidsonagency/$1 [L,QSA]

在同一目录中,我有一个文件夹 thedavidsonagency/ 和 index.php

<?php
echo "Hello World";

index.php 是 davidsonagency/ 目录中的唯一文件。

如果我访问localhost/thedavidsonagency/,我会看到消息

Hello World

但是,访问 da.com 给我一个 500 内部服务器错误

我尝试过改变:

RewriteRule ^(.*)$ /thedavidsonagency/$1 [L,QSA]

RewriteRule ^(.*)$ /ashley/$1 [L,QSA]

目录 ashley 之前已经设置好了。现在访问 da.com 可以让我访问 ashley 网站!

我正在运行 PHP 5.3.8、apache 2.2.21(使用 XAMPP 设置)

在本地环境中的 Windows 7 上,并设置 Hosts 文件:

localhost da.com

实际上,对于不同的文件夹(网站),我还有其他几个类似的条目。他们都工作得很好。但是在我的 htaccess 中将这个新条目添加到这个新文件夹不起作用。

有什么建议吗??有没有我可以在某处清除的缓存?我试过重启 apache 和我的电脑没有运气...

【问题讨论】:

【参考方案1】:

试试这个规则:

RewriteCond %HTTP_HOST da\.com$ [NC]
RewriteCond %REQUEST_URI !^/(HTML2|thedavidsonagency)/ [NC]
RewriteRule ^(.*)$ /thedavidsonagency/$1 [L]

【讨论】:

这也行得通。我喜欢你的规则是多么明确,所以我将使用它们。但是,它只是在一段时间后才开始工作。我没有更改 htaccess 或配置文件中的任何内容。不知道发生了什么,也许缓存被清除了?虽然不知道 htaccess 文件的缓存系统... htaccess 未缓存,但可能在其他地方缓存,例如代码/框架/浏览器等。

以上是关于Apache 重写到新文件夹不起作用(适用于现有文件夹)的主要内容,如果未能解决你的问题,请参考以下文章

xampp apache重写不起作用

并行运行 PHP5.6 和 PHP7.2 - 切换到 5.6(仅适用于 apache2)不起作用

mod_rewrite 适用于 .htaccess 文件,但不适用于 apache2.conf

Charles proxY:在 https 上重写不起作用

从 Apache 2,2 迁移到 Apache 2.4 后,URL 重写不起作用

添加代理通行证后,apache重写规则不起作用