使用mod_rewrite将相对URL请求转换为绝对URL请求

时间:2011-07-18 10:30:16

标签: .htaccess mod-rewrite

我在.htaccess文件中使用了一个简单的重写规则,使我的网址非常漂亮。曾经是这样的:

http://somedomain.com/product-details.php?product=MQ==&hash=123456789

现在是这样的:

http://somedomain.com/secure/123456789/MQ==/rings/details/blue-diamond-topaz-ring.php

这一切都很好,但我有很多PHP文件,所有的JS和CSS链接都是相对的。由于上面这个新的漂亮网址,这些指向JS和CSS的链接现在已经过了5或6个目录。

我的问题:通过mod_rewrite,我是否有办法请求css/style.cssjs/somescript.js重写为http://www/somedomain.com/css/style.css之类的内容,例如RewriteRule ^/css/(.*)$ http://localhost/dev/css/$1 [R=302,L]

我用Google搜索并完成了我的作业,虽然我可以找到一百万次重写URL的引用,但似乎没有一种方法可以用于请求这样的脚本。我试过这个但无济于事:

/css/somefile.css

我认为会将http://localhost/dev/css/somefile.css之类的所有请求发送到RewriteEngine on Options +FollowSymLinks RewriteBase /eterniti-mygate/ RewriteRule ^([^-]*)-article-([^-]*)\.php$ /in-the-news.php?action=$1&article=$2 [L] #rings rewrite rule RewriteRule ^secure/([^-]*)/([^-]*)/rings/details/([^_]*)\.php$ ring-details.php?product=$2&hash=$1 [L] RewriteRule ^css/(.*)$ http://localhost/eterniti-mygate/css/$1 [R=302,L]

任何帮助或指导都得到了很好的体会。


更新:这是我的.htaccess文件的重写部分:

{{1}}

更新:以下是重写的日志文件输出

请在https://docs.google.com/leaf?id=0B-NRfZvE6xi7MmI0N2ZjNzEtYWZlYy00NjJiLWJhMjQtYzAyYzY4ZWIxN2U0&hl=en_GB

查看我的日志文件

它似乎不是从基础重写请求,而是从虚拟目录重写(例如/ secure / ring / details /)。我已将rewriteBase设置为/ eterniti-mygate /,这是我的wamp服务器根目录下的文件夹。

2 个答案:

答案 0 :(得分:0)

使用rewriterule时删除前导(后退)斜杠,请尝试以下操作:

RewriteRule ^css/(.*)$ http://localhost/dev/css/$1 [R=302,L]

答案 1 :(得分:0)

这应该是有用的

RewriteCond %{REQUEST_FILENAME} \.css
RewriteRule ^css/(.*)$ http://localhost/dev/css/$1 [L]

当调用.css文件时,您将({如果文件位于css /下)重写为http://localhost/dev/css/<pathorname>

注意<pathorname>可以包含子目录。 也可能不需要[R = 302]。内部重定向应该足够了。

如果这不起作用,你可以看到会发生什么:

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 2

(如果您仍然无法理解,可以将日志级别提升为4。)

'使用日志详细信息进行编辑

Line 20 :  [perdir C:/wamp/www/eterniti-mygate/] add path info postfix: C:/wamp/www/eterniti-mygate/secure -> C:/wamp/www/eterniti-mygate/secure/af192eaa6808acab8947ce59a32f8d17/MQ==/rings/details/css/reset.css
Line 21 :  [perdir C:/wamp/www/eterniti-mygate/] strip per-dir prefix: C:/wamp/www/eterniti-mygate/secure/af192eaa6808acab8947ce59a32f8d17/MQ==/rings/details/css/reset.css -> secure/af192eaa6808acab8947ce59a32f8d17/MQ==/rings/details/css/reset.css

我们正在尝试提供安全/ af192eaa6808acab8947ce59a32f8d17 / MQ == / rings / details / css / reset.css

'^([^-]*)-article-([^-]*)\.php$'
'^secure/([^-]*)/([^-]*)/rings/details/([^_]*)\.php$'
'^css/(.*)$' 

不匹配。知道插入符号(^)表示:字符串/网址(http://mysite.com excluded)的开头,您无法检测到与css/<something>END不同的内容(仅供参考:$表示字符串/ URL的结尾)。从规则中删除它,它应与<anything>css/<something>END匹配,规则将适用。