2

(不确定这是属于这里还是属于网站管理员;如有必要,请移动。)

我是 Cake 的新手,对 apache 并没有好到哪里去;我做了很多 PHP,但总是使用已经由其他人设置的服务器。所以我正在阅读基本的博客教程,它说:

关于 mod_rewrite 的注意事项 新用户偶尔会遇到 mod_rewrite 问题,所以我将在这里略加提及。如果 Cake 欢迎页面看起来有点滑稽(没有图像或 css 样式),这可能意味着 mod_rewrite 在您的系统上没有运行。以下是一些帮助您启动和运行的提示:

确保允许 .htaccess 覆盖:在您的 httpd.conf 中,您应该有一个部分为服务器上的每个目录定义一个部分。确保正确目录的 AllowOverride 设置为 All。

确保您正在编辑系统 httpd.conf,而不是特定于用户或站点的 httpd.conf。

出于某种原因,您可能获得了一份没有所需 .htaccess 文件的 CakePHP 副本。有时会发生这种情况,因为某些操作系统会处理以“。”开头的文件。隐藏,不要复制它们。确保您的 CakePHP 副本来自站点的下载部分或我们的 SVN 存储库。

确保您正确加载了 mod_rewrite!您应该在 httpd.conf 中看到类似 LoadModule rewrite_module libexec/httpd/mod_rewrite.so 和 AddModule mod_rewrite.c 的内容。”

我在 Linux 上使用 XAMPP。我在 opt/lampp/ 等中找到了我的 httpd.conf 文件,但不确定我需要用它做什么。我搜索了“重写”,只有一行:

LoadModule rewrite_module modules/mod_rewrite.so

AddModule mod_rewrite.c 没有任何内容。

我是否只是为我安装 Cake 的目录创建一个目录部分并将 AlllowOverride 设置为 All?(我为我的 wwwroot 创建了一个单独的子目录并安装在那里,因为我还安装了 Joomla 和 CodeIgniter。)我还需要做些什么吗?我下载的 Cake 确实带有两个 htaccess 类型的文件(._.htaccess 和 .htaccess)——我需要对它们做些什么吗?

感谢您可以向此非服务器管理员提供的任何帮助。

编辑以添加虚拟主机示例:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
4

2 回答 2

1

第 1 步。您应该启用 mod_rewrite,检查使用<?php phpinfo();

步骤 2. 检查 AllowOverride

// I believe you already did that. 
// Make sure you are doing it for the correct webroot!
<Directory />
   AlllowOverride to All
</Directory>

步骤 3. 检查您的默认.htaccess文件是否存在于目录/mypro/mypro/app/mypro/app/webroot

第 4 步.htaccess可能需要修复路径,具体取决于您的蛋糕项目安装。

 e.g. project url http://localhost/mypro/app/webroot/
 /mypro/app/webroot/.htacess
 <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$ mypro/app/webroot/    [L]
    RewriteRule    (.*) mypro/app/webroot/$1 [L]
 </IfModule>

编辑

如果您尝试将其设置为本地域,请在配置了 WAMP 的情况下设置本地域(在 Windows 上) 注意:这可能会针对不同类型的安装进行一些调整 查找您的主机文件(我的位于 C:\WINDOWS\system32\ drivers\etc\hosts) 将其插入底部

# save and close this file named hosts
127.0.0.1       mypro.localhost

测试主机名打开命令提示符并运行 ping mypro.localhost# If ping is good then move on

Now open your apache config file 
httpd.conf and httpd-vhosts.conf (my files are located at)

C:\wamp\bin\apache\Apache2.2.11\conf\httpd.conf
# uncomment line below
Include conf/extra/httpd-vhosts.conf
C:\wamp\bin\apache\Apache2.2.11\conf\extra\httpd-vhosts.conf
# Insert virtual host entries like this, trim dummy entries (if any)

# Changing DocumentRoot
<VirtualHost *:80>
    DocumentRoot "C:/wamp/www"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/mypro/app/webroot"
    ServerName mypro.localhost
</VirtualHost>

保存和关闭文件

创建目录 C:/wamp/www/mypro (如果您之前没有创建过)

于 2011-01-11T18:41:37.670 回答
0

ModRewrite 使 Apache 能够在处理请求之前操纵请求 URL。例如,如果您想将图像存储在其中,/website_images但又想在 HTML 中引用它们,因为/img/donkey.jpg您可以使用 ModRewrite 将所有请求从 更改/img/*/website_images/*. 它处理这个问题的方式是通过正则表达式,其中有整本关于它们的书籍。

就 Apache 而言,有很多配置“指令”(又名选项或设置)。当您运行自己的服务器时,最重要的要了解的是 VirtualHost。它们允许 Apache 处理对您服务器 IP 地址的请求,并根据主机名(本质上是域)将它们路由到正确的网站。您应该在该网站的 VirtualHost 配置中放置任何特定于网站的指令,包括您的 ModRewrite 规则。注意:您还可以从网站目录中的 .htaccess 文件加载其他指令,但这是次优的(并且需要设置 AllowOverride。如果您可以访问 httpd.conf 和相关的 VirtualHost 指令,则应该使用它们。

看起来 Apache 已经配置为加载 ModRewrite 模块,所以您不需要更改它。在您的新 CakePHP 网站的 VirtualHost 指令中,您可以使用下面的指令<Directory /path/to/your/website>来设置 ModRewrite:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

它看起来又大又吓人,但它的作用是告诉 Apache 将所有无法处理的请求(因为资源不存在)定向到 index.php。发生这种情况时,CakePHP 接管并将请求路由到适当的控制器和操作。

我不熟悉 XAMPP 的配置方式,所以我无法告诉您那些 VirtualHost 定义将在哪里。也许其他人可以在这里插话……</p>

于 2011-01-11T18:31:24.667 回答