如果参数不存在,是否重写 url?

如果参数不存在,是否重写 url?

我已经在 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 文档。正如你所说,这将花费两倍的时间。

我还将匹配模式简化为.*,但这只是一个小的清理。不需要约束匹配^...$,也不需要使用 进行捕获(...),因为您没有在规则目标中使用捕获的值。

相关内容