我必须在使用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
我明白了!我在下面描述我的整个解决方案!
答案 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
效果很好!