我已经在 Google 上搜索过这个问题但似乎没能弄明白。
我只想将请求的任何路径重定向到 index.php 中的 GET 参数:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/.+\.(js|css|png|jpg|gif|ico)$
RewriteRule ^(.*)$ http://localhost/site/index.php?request_url=http://%{HTTP_HOST}%{REQUEST_URI} [L,QSA]
现在,重定向可以起作用,但是速度非常慢,并且执行了两次。
我是否需要添加另一个条件来检查 request_url 是否已经存在?如果是这样,我该怎么写?似乎想不通。
现在它不完全是一个重定向循环,只是真的很慢。
任何帮助均感激不尽。
非常感谢!
答案1
如果您将重写规则更改为:是否有帮助
RewriteRule .* /site/index.php?request_url=http://%{HTTP_HOST}%{REQUEST_URI} [L,QSA]
主要区别在于删除http://localhost
目标中的前导。这可能有帮助,因为如果%{HTTP_HOST}
不同于localhost
,那么 Apache 将发出外部重定向:请参阅标题为“绝对 URL”的段落RewriteRule 文档。正如你所说,这将花费两倍的时间。
我还将匹配模式简化为.*
,但这只是一个小的清理。不需要约束匹配^...$
,也不需要使用 进行捕获(...)
,因为您没有在规则目标中使用捕获的值。