htacess,。{0,10}有效,。+不适用于重定向,错误500

时间:2019-07-12 00:13:15

标签: php regex .htaccess mod-rewrite url-rewriting

我想使用子目录中的文件来满足任何请求。示例:

浏览器请求localhost / style.css,

服务器从localhost / static / style.css响应(无需重定向浏览器!)

使用以下.htacess文件可以完美地工作:

RewriteEngine on
RewriteRule ^(.{0,10})$ static/$1

但是当我这样做

RewriteEngine on
RewriteRule ^(.+)$ static/$1

失败,并显示“内部服务器错误”。

1 个答案:

答案 0 :(得分:-1)

/var/log/apache2/error.log说过

  

请求超出了10个内部重定向的限制

我猜它正在从style.css重定向到static/style.css,然后重定向到static/static/style.css,依此类推。解决方案是使用:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/static/
RewriteRule ^(.+)$ static/$1

当URL以static /

开头时,RewriteCond行阻止下一个RewriteRule重定向。

这在这里也很有帮助:https://stackoverflow.com/a/6800150/4417769

htacess在重定向后再次遍历规则,因此它被递归应用,[L]无法停止它。


另一个解决方案是

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/static/%{REQUEST_URI} -f
RewriteRule ^(.+)$ static/$1

仅当重定向后的网址与存在的文件匹配时才重定向