我在.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.css
或js/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}}
更新:以下是重写的日志文件输出
查看我的日志文件它似乎不是从基础重写请求,而是从虚拟目录重写(例如/ secure / ring / details /)。我已将rewriteBase设置为/ eterniti-mygate /,这是我的wamp服务器根目录下的文件夹。
答案 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
匹配,规则将适用。