我第一次使用mod_rewrite以创建类似于facebook的网站。
Whener我输入mywebsite.com/user.name,mod_rewrite将我重定向到mywebsite.com/hotsite/index/php,在那里,我使用一个小的php从url获取用户名并从中获取userId
然后我有其他领域,如mywebsite.com/user.name/diary,mywebsite.com/user.name/contact等等......
这在我的.htaccess中的代码运行良好:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /mywebsite
# ————————————————————————-
# > URL REWRITING
# ————————————————————————-
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)/diario$ hotsite/diary.php
RewriteRule ^(.*)/recados$ hotsite/messages.php
RewriteRule ^(.*)/fotos$ hotsite/photos.php
RewriteRule ^(.*)/videos$ hotsite/videos.php
RewriteRule ^(.*)/contato$ hotsite/contact.php
RewriteRule ^([a-z0-9._\-]+)$ hotsite/index.php [L]
我遇到的问题是外部文件的路径(css,图像,背景......)。 由于我的浏览器认为我在“website.com”,我不得不在所有路径中添加“hotsite /”。当我在用户主页面时,这适用于“mywebsite.com/user.name”。但是,如果我转到“mywebsite.com/user.name/diary”,浏览器会认为我在另一个文件夹中,然后我必须添加“../hotsite”才能使路径生效。
我可以在所有路径中制作一个IF来检查我是否在索引处,但这会非常笨拙。 我也可以将绝对路径放在evertyhing中,但由于我正在使用apache离线开发,这也不会很好。
还有其他解决方案吗?
非常感谢你。
答案 0 :(得分:0)
您应该使用HTML中提供的base
标记(将其放在<head></head>
标记之间):
<base href="yoursiteroot" />
换句话说,就像这样:
<base href="/mywebsite" />
但是,这需要根据您指定的路径调整相对链接。 : - )