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

chr*_*coy 7 apache .htaccess mod-rewrite

这个网址正在被重写

http://domain.com/embed/slideshow-image-list.js
Run Code Online (Sandbox Code Playgroud)

对此

http://domain.com/code/embed/slideshow-image-list
Run Code Online (Sandbox Code Playgroud)

当前的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]
Run Code Online (Sandbox Code Playgroud)

它当前正确重写,但如果你访问.js网址,它会重定向到完整的网址.

即时通讯只是为了映射它没有重定向

Dav*_*tti 14

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

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]标志.

  • 哦,如果“/code/embed/slideshow-image-list”不是实际文件并且应该由index.php通过以下规则处理,那么您可能需要删除“[L]”。 (2认同)