我有一个.htaccess文件,可以执行多次重写命令并且运行良好。但是,在测试时,我遗漏了一条关键信息,在$ _SERVER变量中设置了id(我在php脚本中使用$ _SERVER)。
我有一个URL example.com/f/847f34c76f64cad96effc8e9c3cea176,其中long字符串表示id,f表示脚本处理请求。
我有以下重写,它处理脚本部分。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/robots.txt
RewriteCond %{REQUEST_URI} ^/f/(.*)$ [NC]
RewriteRule ^ /scriptf.php [L]
就像我说的,这正确处理重定向。但是,我还需要将id放在环境变量中。这样的事情就是我的想法
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/robots.txt
RewriteCond %{REQUEST_URI} ^/f/(.*)$ [NC]
RewriteRule ^ - [E=id:$1]
RewriteRule ^ /scriptf.php [L]
但遗憾的是这不起作用。
此外,在查询中发送ID不是我案例的有效解决方案。
编辑:错误日志输出以供参考:
[Tue Oct 08 10:48:31 2013] [error] [client 192.168.77.53] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
答案 0 :(得分:1)
如果您希望id
中有$_GET['id']
,请将您的代码更改为:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^f/(.+)$ /scriptf.php?id=$1 [L,QSA,NC]
或者如果您希望id
数组中的$_SERVER
可用,请将您的代码更改为:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^f/(.+)$ /scriptf.php [L,NC,E=ID:$1]
然后你可以在PHP中使用以下变量:
$_SERVER["REDIRECT_ID"]