9

这个网址正在重写

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 url,它会重定向到完整的 url。

我只是想在没有重定向的情况下映射它

4

1 回答 1

19

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

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

或者,如果生成的路径不是真实文件并且应该由 index.php 处理,则删除该路径[L]以便执行下一个规则:

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

请注意,mod_rewrite 指南说明了以下内容,这似乎表明完整的 URL 路径是可以的,但我相信它与 ServerName 进行比较,不一定是 ServerAlias(我对此不是 100% 确定,但我一直使用在进行非重定向重写时使用路径而不是完整的 URL):

绝对网址

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

于 2013-01-20T02:40:46.257 回答