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/Apache 文件夹中的 .htaccess 未找到错误 404
.htaccess 在 Xampp localhost 服务器上不起作用
C:/xampp/htdocs/.htaccess: RewriteRule: 错误标志分隔符 - XAMPP/Windows