无法使用本地开发服务器获取.htaccess文件重写

时间:2014-07-31 00:54:56

标签: php apache .htaccess mod-rewrite xampp

我无法获取我的.htaccess文件来重写URL。以下是我所确定的:

  • httpd.conf文件已取消注释LoadModule rewrite_module modules/mod_rewrite.so
  • <Directory "C:/xampp/htdocs">下的httpd.conf文件有AllowOverride All
  • phpinfo()已将mod_rewrite置于已加载模块下。

我目前正在使用XAMPP。

我的主目录是C:\xampp\htdocs\test

test文件夹中,我有一个基本的index.php文件和.htaccess文件。

.htaccess文件中:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$\ http://google.com [L]

#RewriteRule ^(.*)$\ index.php/$1 [L]
#RewriteBase /test/
  • 正在访问.htaccess文件,因为当我在文件中丢弃垃圾时,当我访问500 error页面时,我会收到index.php
  • 最后两个评论规则是我打算使用的,但是现在只需重定向到谷歌会让我知道它是否有效。我已经使用评论规则尝试过,但没有运气。
  • .htaccess规则适用于我的网络服务器。

当我访问我的index.php页面时,我没有被重定向。它只是正常加载页面。

我花了4个多小时寻找解决方案,但没有运气。我尝试了XAMPP和EasyPHP,但两者都有同样的问题。

如果有人有任何想法或建议,我将非常感激。

修改

以下是重新启动PC后启动Apache时的错误日志:

[Thu Jul 31 18:05:22.365119 2014] [ssl:warn] [pid 6380:tid 384] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Thu Jul 31 18:05:22.396117 2014] [core:warn] [pid 6380:tid 384] AH00098: pid file C:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Jul 31 18:05:22.512122 2014] [ssl:warn] [pid 6380:tid 384] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Thu Jul 31 18:05:22.851147 2014] [mpm_winnt:notice] [pid 6380:tid 384] AH00455: Apache/2.4.9 (Win32) OpenSSL/1.0.1g PHP/5.5.11 configured -- resuming normal operations
[Thu Jul 31 18:05:22.851147 2014] [mpm_winnt:notice] [pid 6380:tid 384] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:13:13
[Thu Jul 31 18:05:22.851147 2014] [core:notice] [pid 6380:tid 384] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache'
[Thu Jul 31 18:05:22.853142 2014] [mpm_winnt:notice] [pid 6380:tid 384] AH00418: Parent: Created child process 3936
[Thu Jul 31 18:05:23.241170 2014] [ssl:warn] [pid 3936:tid 416] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Thu Jul 31 18:05:23.388142 2014] [ssl:warn] [pid 3936:tid 416] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Thu Jul 31 18:05:23.423146 2014] [mpm_winnt:notice] [pid 3936:tid 416] AH00354: Child: Starting 150 worker threads.

2 个答案:

答案 0 :(得分:0)

你的模式中的\正在搞砸一切。实际发生的是\转义空间,这使得mod_rewrite认为模式目标都是模式,而[L]标志是目标。 Apache指令和参数由空格分隔,因此当你转义空格时,它会使apache成为整个事物的单个参数。

你有什么:

RewriteRule ^(.*)$\ http://google.com [L]
|directive| | pattern               | | target |

所以摆脱\

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]

因此指令为RewriteRule,模式为^(.*)$,目标为http://google.com,标志为[L]

答案 1 :(得分:0)

我能想到的其他两个原因:

  1. 您的.htaccess文件实际上是.txt文件,即“.htaccess.txt”,但“.txt”文件扩展名隐藏在文件资源管理器中。 (请参阅文件属性中的“文件类型:”字段以检查实际文件扩展名)
  2. 您的.htaccess文件无权被服务器读取。
  3. 备注:我已检查过你的语法是否正常。