ZEND - 如何使它在共享主机上运行?

时间:2014-10-04 13:03:08

标签: php css .htaccess redirect zend-framework2

我必须在使用Pretty URL的共享主机上移动Zend网站,但是在添加params时不会加载css文件。在移动之前,我想用服务器ip地址进行测试以确定。

例如 -SERVER_IP / ~username / en(works)
-SERVER_IP / ~username / en / news(失败,因为它在" en"文件夹中搜索)

我想将每个css文件从path / css /重定向到我的真正的css文件夹,该文件夹有很多css文件。

我想为每个路径/ images /和/ js /以及其他路径做同样的事情。

有人可以帮助我吗?

谢谢你!


更新1

domain.com和SERVER_IP / ~username之间路径是否相对变化?当我设置/css/style.css时,它搜索SERVER_IP / css / style.css而不是SERVER_IP / ~username / css / style.css。如果我能使它适用于两者,我的问题就会消失。但是我无法使用域名进行测试,因为我暂时没有


更新2

我已在C:\ windows \ system32 \ drivers \ etc \中修改了我的主机文件,以模拟真实域名。正如我所料,相对路径的运作方式并不相同。

- SERVER_IP/~username/index.php <img src="/img/world.jpg" /> => SERVER_IP/img/world.jpg (BAD, note i've lose ~username)
- www.domain.com/index.php <img src="/img/world.jpg" /> => www.domain.com/img/world.jpg (perfect)

有了这个改变,我现在的所有路径都很好,不需要重定向任何东西。但是出现了另一个问题由于我使用的是www.domain.com,因此网址中会显示index.php,我不想这样:www.domain.com/index.php/en


更新3

我发现了这条规则:RewriteRule ^index.php(.*)$ http://%{HTTP_HOST}/$1 [R=301,NC,L]。 index.php现已删除,但是当我在www.domain.com/en上时,看起来en不在请求uri中,我的所有链接都移到了www.domain.com/en/en/ ..

我在这里贴了我的.htaccess内容:

Options +FollowSymLinks
Options -Indexes
RewriteEngine on
RewriteBase /

DirectoryIndex index.php index.html

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^index.php(.*)$ http://%{HTTP_HOST}/$1 [R=301,NC,L]



更新4

我明白了!我在下面描述我的整个解决方案!



1 个答案:

答案 0 :(得分:2)

完整的最终解决方案

我找到了解决方案,现在共享主机上的所有内容都正常运行#1。这是我的完整解决方案,我希望它能为某人节省大量时间。

1-完成Zend架构(D =目录,F =文件)

- public_html/ 
      (D) application/
      (D) data/
      (D) library/
      (D) docs/
      (D) nbproject/
      (D) public/
           (F) index.php
               ...
      (F) .htaccess

2-删除&#34; public /&#34;中的基本.htaccess文件文件夹并将此文件放在根文件夹&#34; public_html /&#34; (或../ public)

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

结束!!! 这就是你所要做的一切,没有更多,没有棘手或肮脏的代码!此.htaccess文件解决了httpd.conf文件中的DOCUMENT_ROOT配置问题以进行共享托管。

重要提示
如果您的域名当时未被转发(或者您想在将主机从服务器移动到另一个服务器之前进行测试(我的情况)),并且您希望使用该类型的URL访问您的网站http://SERVER_IP/~username/ ,它不会起作用。最好的解决方案是在C:\ windows \ system32 \ drivers \ etc \中临时编辑主机文件,添加如下所示的行:
SERVER_IP domain.com效果很好!