我最近花了好几天试图让我的.htaccess重写URL,我最终占了上风。我的典型网址现已从http://example.co.uk/pages/aboutMe/pages/aboutMe.php
(不要问)改为http://example.co.uk/aboutMe
,我非常满意。
但是,结果,我的相对路径不再有效 - 我再也不能在源代码中输入../images/email.png
了。相反,我必须完整地输入路径 - /pages/contact/images/email.png
,这不是一个好的做法/惯例,非常严格(因为它不灵活)而且我可以看到这在未来变得非常棘手,如果我曾经决定重命名一个文件夹,例如。
我意识到这可能是因为它引用了当前的URL(不是原始的,未经修改的URL),并且因为它正在寻找不存在的目录而感到困惑。这有解决方法吗?或者这是一个整洁的URL的价格?
以下是我的RewriteRules:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# Remove www.
RewriteCond %{HTTP_HOST} ^www.mythofechelon.co.uk$ [NC]
RewriteRule ^(.*)$ http://mythofechelon.co.uk/$1 [R=301,L]
# Rewrite /pages/filename/pages/filename.php to /fileName
RewriteRule ^home/?$ /pages/index/pages/index.php [L]
RewriteRule ^projectsPortfolio/?$ pages/projectsPortfolio/pages/projectsPortfolio.php [L]
RewriteRule ^projectsPortfolio-flash/?$ pages/projectsPortfolio/pages/projectsPortfolio-flash.php [L]
RewriteRule ^projectsPortfolio-code/?$ pages/projectsPortfolio/pages/projectsPortfolio-code.php [L]
RewriteRule ^aboutMe/?$ pages/aboutMe/pages/aboutMe.php [L]
RewriteRule ^contact/?$ pages/contact/pages/contact.php [L]
我不得不手动重写每个网页的网址,因为我被告知我的网址中没有模式。无论如何,尽量不要因此而陷入困境。
感谢。
答案 0 :(得分:1)
据我所知,没有解决方法。根据您的重写规则,您可以为图像文件夹创建另一组重写规则(例如,将“http://example.co.uk/images”重写为“http://example.co.uk/”页/接触/图像“)。
话虽如此,当你开始重写URL时,我真的不认为使用绝对路径来处理图像是不好的做法。实际上它更健壮,因为你可以自由地改变URL的重写方式而不会破坏每个相对路径。