使用mod重写重写url而不重定向

时间:2013-01-20 00:51:12

标签: apache .htaccess mod-rewrite

此网址正在被重写

http://domain.com/embed/slideshow-image-list.js

到这个

http://domain.com/code/embed/slideshow-image-list

当前的htaccess代码

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
RewriteRule ^embed/([^\.]+)\.js$ http://domain.com/code/embed/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [L]

目前已正确重写,但如果您访问.js网址,则会重定向到完整网址。

我只想在没有重定向的情况下进行映射

1 个答案:

答案 0 :(得分:14)

不要在规则中提供域,只提供路径。使用完整域名时,它将被重定向。

RewriteRule ^embed/([^\.]+)\.js$ /code/embed/$1 [L]

或者,如果生成的路径不是真实文件并且应该由index.php处理,请在[L]之后设置,以便执行下一条规则:

RewriteRule ^embed/([^\.]+)\.js$ /code/embed/$1

请注意,mod_rewrite guide表示以下内容,这似乎表明完整的URL路径没问题,但我相信它与ServerName进行比较,不一定是ServerAlias(我不是100%肯定,但我总是在进行非重定向重写时使用路径而不是完整的URL:

  

绝对网址

     

如果指定了绝对URL,mod_rewrite将检查主机名是否与当前主机匹配。如果是,则删除方案和主机名,并将生成的路径视为URL路径。否则,将对给定的URL执行外部重定向。要强制外部重定向回到当前主机,请参阅下面的[R]标志。