Windows下使用apache的jk_mod连接WAMP和Tomcat

最近在网上看到很多关于使用jk_mod连接Apache和Tomcat的教程,因为本人主攻PHP,用的都是WAMP作为服务器,它内嵌了Apache、MySQL以及PHP。使用网上的很多的教程都是把Tomcat放在D:\Tomcat,Apache放在在D:\Apache,类似这样的位置,就是两个东西是分开的,这样的情况下,假设Tomcat中有一个名字叫home的目录,而Apache下没有,想要使用localhost(和localhost:8080区分)访问Tomcat的东西,那么我们得在Apache的httpd.ini中加上一句:

JkMount /home/* ajp13

告诉Apache我访问home这个目录的时候使用ajp协议连接到Tomcat。如果我们有很多这样的文件,我们每次都要添加这句话是不是显得特别麻烦?所以我的想法是让Apache原本的localhost的目录和Tomcat的webapps目录放到一起,即把Tomcat中的basedoc的路径指向到Apache的网站根目录,这样就可以不用在httpd.ini中添加东西了。

下面说下步骤:

下载安装WAMP

下载地址为:http://www.wampserver.com/en/ 或者直接点击:http://sourceforge.net/projects/wampserver/files/WampServer%202/WampServer%202.2/wampserver2.2e/wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe/download 下载,本人安装的是32位的,大家如果没有特殊的需要建议安装32位的,这样后面很多东西不会混乱,下载完成就是傻瓜式的安装,启动之后只要WAMP的图标是绿色的就表示成功了,访问localhost基本上就可以看到本地的网站目录了,如果不行可以查下是不是80端口被占用了。

下载 安装Java JDK

这个东西的安装这里就不赘述了,自己谷歌去。涉及到环境变量等等。

下载并解压Tomcat

下载地址为:http://tomcat.apache.org/download-70.cgi 或者直接点击:http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.39/bin/apache-tomcat-7.0.39.zip 下载,解压之后,进入到Tomcat的目录,将里面的所有文件包括bin、conf、lib等等全部拷到WAMP的目录下,让这些文件和WAMP的www文件夹并列就行了。为了等下验证的方便,把Tomcat的带来的webapps这个目录下的examples等文件夹拷贝到www里面,然后把webapps删掉。

下载并配置jk_mod模块

下载地址为:http://mirror.bit.edu.cn/apache//tomcat/tomcat-connectors/jk/binaries/windows/ ,这里要注意的是你得先看看你的WAMP里的Apache是什么版本左击任务栏的WAMP图标,选中Apache->Version,看看哪个版本前面打了个勾,Apache的版本就是那个了。我这离的2.2.22,额,这么多二。我们刚刚下载的WAMP是32位的,所以在这个下载地址里也选择32位的
tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip 下载。下载完成解压之后,在目录里有一个jk_mod.so,把这个东西拷到WAMP下的 bin->apache->apache2.2.22->modules中。然后打开Apache的httpd.ini,在一大堆的LoadModule中,加入一句话:

LoadModule jk_module modules/mod_jk.so

最好按照字母的顺序放置,jk_module写在isapi_module的下面:

20130429144935

这样方便以后在WAMP中选择开启关闭哪些Apache模块。

接下来到WAMP的conf文件夹(其实是Tomcat那里拷过来的)下,添加一个名为workers.properties的文件,在里面添加内容:

#让mod_jk模块知道Tomcat的位置
workers.tomcat_home="F:/tomcat"

#让mod_jk模块知道jre的位置
workers.java_home="C:/Program Files (x86)/Java/jdk1.7.0_01" 

#模块版本
worker.list=ajp13

#工作端口,若没占用则不用修改
worker.ajp13.port=8009

#本机,若上面的Apache主机不为localhost,作相应修改
worker.ajp13.host=localhost

#类型
worker.ajp13.type=ajp13

#代理数,不用修改
worker.ajp13.lbfactor=1

然后打开这个目录下的server.xml,找到Host这个标签,把appBase改成WAMP的www目录,我这离使用的是相对路径:

<Host name="localhost" appBase="www" unpackWARs="true" autoDeploy="true">

接下来在httpd.ini的最后面加入下面这段:

JkWorkersFile "F:/wamp/conf/workers.properties"
JkLogFile "F:/wamp/bin/apache/apache2.2.22/logs/mod_jk.log" 
JkLogLevel warn  
JkMount /*.jsp ajp13
JkMount /*.do ajp13

上面的JkWorkersFile 就是刚刚那个workers.properties文件的路径,JkMount后面的ajp13跟workers.properties里写的worker.list=ajp13的ajp13要相同。

在httpd.ini中找到:

<IfModule dir_module>
    DirectoryIndex index.php index.php3 index.html index.htm
</IfModule>

在后面加上index.jsp,这样index.jsp就成了默认首页了。

打开服务器

接下来将WAMP重启,然后到WAMP目录的bin下面,双击startup.bat这个批处理程序,打开Tomcat,如果Tomcat没有正常打开很可能是第二步安装Java JDK的时候失败了。现在我假设你的安装正常,然后在浏览器中打开:http://localhost/examples/jsp/ ,如果看到正常的页面:

20130429152042

说明jk_mod连接WAMP和Tomcat的配置成功了!

为WordPress创建固定链接并去除固定链接中的index.php并指定文件和目录不被重写

        利用Windows搭建WordPress网站的朋友应该会发现这样一个问题:在默认情况下,WordPress会将你的固定链接结构设置为类似http://www.tonitech.com/?p=1856的结构,这个结构无法受到搜索引擎的欢迎,很多博主为了给自己的博客带来更多的流量都会对此稍做加工。想要修改固定链接结构也非常简单,可以从您的管理面板 (设置 → 固定链接)来完成。

20130305015530

        在固定链接设置的页面中,如果使用的是非默认固定链接,会被强制加上一个index.php。为了网站的美观和SEO优化的效果,建议大家移除index.php,本文提供的方法是需要你的空间支持mod_rewrite的,方法如下:

如果你是Windows服务器+IIS的,你新建一个httpd.ini或者在原有的httpd.ini中加入:

[ISAPI_Rewrite]
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]

保存后,上传至WordPress程序所在的根目录,如果不行,也许你的空间服务商需要手动加载httpd.ini将它转换成.htaccess格式的文件,请及时联系你的空间服务商。

或者,你创建一个.htaccess文件,加入以下代码:

RewriteEngine On
RewriteCompatibility2 On
RepeatLimit 32
RewriteBase 
#  3600 = 1 hour
# unsupported directive: CacheClockRate 3600
#  Protect httpd.ini and httpd.parse.errors files
#  from accessing through HTTP
#  Rules to ensure that normal content gets through
RewriteRule ^/sitemap.xml$ /sitemap.xml [L]
RewriteRule ^/favicon.ico$ /favicon.ico [L]
#  For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule ^/wp-(.*)$ /wp-$1 [L]
#  For normal wordpress content, via index.php
RewriteRule ^/$ /index.php [L]
RewriteRule ^/(.*)$ /index.php/$1 [L]

接下来你就可以去设置你的固定链接了,设置→固定链接,选中“自定义结构”,我在输入框中输入的是:/%post_id%.html,这样原来http://www.tonitech.com/?p=1856的地址就会变成http://www.tonitech.com/1856.html,你也可以根据你的喜好自定义。

如果你使用了本文的.htaccess配置设置了固定链接,可能会遇到你的网站根目录下的图片或者目录无法访问的问题,那么你可以根据你的情况。例如一个叫做sitemap.html的文件被重写了找不到了,你就得在.htaccess中加一句:

RewriteRule ^/sitemap.html$ /sitemap.html [L]

如果你有一个叫做so的目录被重写了找不到了,你就得在.htaccess中加一句:

RewriteRule ^/so(.*)$ /so$1 [L]

这样可以保证so目录下所有的文件都不会被重写。

Zend Studio代码无法自动提示以及代码跟踪函数和变量问题的解决方法

今天在工作中,发现我的Zend Studio8.0.1无法使用ctrl跟踪代码中的函数和变量,并且自动提示也不能使用了。我删除了项目,重新建立了下项目发现还是不行。后来发现有一篇外文(http://www.exploit.cz/php/zend-studio-code-autocomplete-fix.html)讲了这个问题的解决方法:
1. 先找到你Zend Studio的默认配置目录,方法是在Zend Studio中点击左上角的File->New->PHP Project,这时候会打开一个框,里面有一个灰色的Directory后面的路径就是你的配置目录了。
2. 打开你的配置目录,接着依次打开.metadata->.plugins->org.eclipse.core.runtime->.settings。
3. 到了.settings目录之后,删除org.eclipse.dltk.ui.prefs文件。
接下来就是各种刷新啊什么的,然后就解决了这个Zend Studio代码无法自动提示以及代码跟踪函数和变量的问题了!

3. 开始学习Zend Framework(ZF框架的目录结构)

打开项目中的index.php文件,你应该能看到以下代码:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
    index.php文件为application目录和Zend类库文件夹设置了包含路径,设置了你现在正在开发的环境变量,加载了配置的设置信息,以及运行位于application目录中的引导文件。
    你可能已经猜到,你只是在一个标准的请求经过的路径。接下来要提的文件是Bootstrap.php,这个文件放置在application目录下。打开文件你会看到以下代码:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
 
}
Bootstrap.php文件是将应用程序要使用的模块和组件进行初始化的主要文件。最后,让我们看看在应用程序的重要目录。在根目录下是library, application, public和test文件夹以及zfproject.xml文件。library文件夹包含Zend框架的文件,我建议以后可以把其他的第三方扩展和组件放在在这个位置。application目录包含许多子目录如controllers,views,configs和models:
  • controllers目录包含应用程序的所有控制器。
  • views目录包含应用程序的所有视图。
  • models目录包含应用程序的所有模型。
  • configs目录包含为应用程序设立的所有配置文件。
因为有很多的文件夹,我创建了一个表格来帮助你确定每个文件夹包含什么,有什么作用:
目录/文件 主要用途
application 包含核心应用程序代码,你可以在这里找到任何应用程序所有的controllers,model和views。
library 包含Zend框架的库文件,我建议将所有第三方的源代码放在这里。
test 包含控制器的单元测试用例,PHP的单元被使用。
public 包含.htaccess和index.php文件,我建议将所有应用程序的CSS、JavaScript、图片和任何静态内容放在这里。
.zfproject.xml 由Zend_Tool创建的文件来识别整个项目。
application/controller 所有应用程序的控制器都应该放在这里。
application/views 所有应用程序的助手和视图都应该放在这里。
application/models 所有应用程序的模型都应该放在这里。
application/configs 所有应用程序的配置文件都应该放在这里。
Bootstrap.php Bootstrap.php文件用于为应用程序初始化组件。

2. 开始学习Zend Framework(Apache虚拟主机的配置)

    在第1节中,我们可以打开http://localhost/你的项目目录/public/访问你的ZF工程,就对于开发来说,这样还是比较麻烦的,因为你每次开发的时候要记住这一大串的目录或者点击多次才能进入。对于服务器,好处是可以在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站,可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的域名。

    配置Zend Framework工程虚拟主机的步骤:

    1. 进入你的ZF工程目录下的docs文件夹,打开README.txt,复制类似以下的内容:

<VirtualHost *:80>
   DocumentRoot "D:/wamp/www/你的项目目录/public"
   ServerName .local

   # This should be omitted in the production environment
   SetEnv APPLICATION_ENV development

   <Directory "D:/wamp/www/你的项目目录/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>

</VirtualHost>

在右下角的WAMP服务器图标上左击: 

wamp

打开Apache下的http.conf,然后将上面复制的那段内容黏贴到http.conf的最下面。你可以将内容里的“ServerName .local”修改成你想要的任何域名,比如我设置成:“ServerName www.tony.com”。

2. 进入你的C:\Windows\System32\drivers\etc这个目录,用记事本打开hosts,在里面添加一句:“127.0.0.1       www.tony.com”,这个域名就是上面的ServerName。 然后配置Apache的Rewrite模块,这个非常重要!左击WAMP服务器的图标->Apache->Apache模块,向下寻找rewrite_module,点击之后它前面打勾就解决问题了。

3. 最后一步就是重启服务器,左击WAMP服务器的图标->重新启动所有服务,然后在浏览器中输入你刚刚设置的域名,我的是www.tony.com,是不是就看到了你的Zend Framework工程的欢迎页面了呢?你如果用360安全浏览器打开的话,应该会提示危险信息,说域名重定向。

 

如果有疑问,请留言或者发送电子邮件联系博主Tony。