.htaccess 从查询字符串中获取(异常)

.htaccess GET from query string (exception)

我有一个重写规则,它可以跨域完美运行,但在同一域上会产生无限循环。

Allow from all
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ url.php?i= [R=301,L]

我们的目标是创建一个替代 404 错误的方法,它可以正确转到 link 缩短应用程序中的页面。

例如,example.com/abc需要重定向到example.com/url.php?i=abc

即它从 '/'

之后获取 'abc'

但是只要 url.php 托管在 xyz.com 上,它就会重定向一次并以

结束

示例。com/url.php?i=url.php 而不是值“abc”

修复此重写规则以使其获取 'abc' 一次并将其传递给正确的 url.php 的最佳方法是什么?

谢谢

您需要删除 R=301 标志,因为您不想向外部客户公开您的内部处理。要使其成为内部,您不能使用 R 标志。

如前所述,您需要使用 RewriteCond 来跳过正在重写的文件和目录。

建议代码:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ url.php?i= [QSA,L]

QSA 标志用于追加查询字符串。

确保在测试此更改之前完全清除浏览器缓存。