Htaccess记录:修订间差异
(创建页面,内容为“Apache URL重写引擎规则编写随记 === debug-type1 === 对于Apache URL重写的调试,一直是比较头疼的问题,因为在服务器端并且没有deb…”) |
小无编辑摘要 |
||
(未显示同一用户的2个中间版本) | |||
第1行: | 第1行: | ||
Apache URL重写引擎规则编写随记 | Apache URL重写引擎规则编写随记 | ||
=== debug-type1 === | ===debug-type1=== | ||
对于Apache URL重写的调试,一直是比较头疼的问题,因为在服务器端并且没有debug工具。网上流行的方法就是用rewrite的日志文件,给virtualhost添加如下设置:<blockquote>#Rewrite Log</blockquote><blockquote>RewriteLog logs/rewrite.log #此处可以写绝对地址 </blockquote><blockquote>RewriteLogLevel 3</blockquote>但是,实际上,Since Apache httpd 2.4 mod_rewrite RewriteLog and RewriteLogLevel directives has been completely replaced by the new per-module logging configuration. | 对于Apache URL重写的调试,一直是比较头疼的问题,因为在服务器端并且没有debug工具。网上流行的方法就是用rewrite的日志文件,给virtualhost添加如下设置:<blockquote>#Rewrite Log</blockquote><blockquote>RewriteLog logs/rewrite.log #此处可以写绝对地址 </blockquote><blockquote>RewriteLogLevel 3</blockquote>但是,实际上,Since Apache httpd 2.4 mod_rewrite RewriteLog and RewriteLogLevel directives has been completely replaced by the new per-module logging configuration. | ||
=== debug-type2 === | |||
应改为<blockquote>LogLevel alert rewrite:trace6 #(can be increased to trace8)</blockquote>但是这样的调试有很多弊端, | |||
#Apache的RewriteLog指令只能在conf文件中,不能在.htaccess文件,所以必须具有root用户权限,并且修改后需要重启apache,对调试代理复杂性。 | |||
#默认的日志位置 /var/log/httpd 也只能有root用户才能访问。 | |||
#由于一次刷新网页的请求很多(如很多图片、js的请求),导致日志文件比较凌乱,查看也比较困难。 | |||
===debug-type2=== | |||
利用301跳转将变量放入新地址栏 | 利用301跳转将变量放入新地址栏 | ||
#Should use vardump in Query | |||
RewriteCond %{QUERY_STRING} vardump | RewriteCond %{QUERY_STRING} vardump | ||
RewriteRule (.*) <nowiki>http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI}</nowiki> [R=301,L,QSA] | RewriteRule (.*) <nowiki>http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI}</nowiki> [R=301,L,QSA] | ||
这里列出来Apache默认的一些变量 | 这里列出来Apache默认的一些变量 | ||
#Apache variables | |||
HTTP_USER_AGENT | HTTP_USER_AGENT | ||
HTTP_REFERER | HTTP_REFERER | ||
第63行: | 第61行: | ||
IS_SUBREQ | IS_SUBREQ | ||
HTTPS | HTTPS | ||
这样就可以轻松的打印出某些具体变量的值,以便检查我们的设置是否正确。 | 这样就可以轻松的打印出某些具体变量的值,以便检查我们的设置是否正确。 | ||
'''其二,我们可以单独使用下面一行代码''' | '''其二,我们可以单独使用下面一行代码''' | ||
<nowiki>#Goto baidu | |||
#Goto baidu | RewriteRule (.*) http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI}</nowiki> [R=301,L,QSA] | ||
把这行代码放到我们想要的RewriteRule的前面,如果我们的RewriteCond验证成功,则当前URL就可以被跳转,否则,不跳转。这样可以轻松的检查我们书写的RewriteCond是否正确。 | 把这行代码放到我们想要的RewriteRule的前面,如果我们的RewriteCond验证成功,则当前URL就可以被跳转,否则,不跳转。这样可以轻松的检查我们书写的RewriteCond是否正确。 | ||
第78行: | 第75行: | ||
注:摘自互联网文章,略加修改整合,仅供记录参考 | 注:摘自互联网文章,略加修改整合,仅供记录参考 | ||
相关引述-官方documentation: http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html | |||
[[分类:Html]] | [[分类:Html]] | ||
[[分类:Http]] | |||
[[分类:Apache]] |
2020年4月18日 (六) 15:59的最新版本
Apache URL重写引擎规则编写随记
debug-type1
对于Apache URL重写的调试,一直是比较头疼的问题,因为在服务器端并且没有debug工具。网上流行的方法就是用rewrite的日志文件,给virtualhost添加如下设置:
#Rewrite Log
RewriteLog logs/rewrite.log #此处可以写绝对地址
RewriteLogLevel 3
但是,实际上,Since Apache httpd 2.4 mod_rewrite RewriteLog and RewriteLogLevel directives has been completely replaced by the new per-module logging configuration.
应改为
LogLevel alert rewrite:trace6 #(can be increased to trace8)
但是这样的调试有很多弊端,
- Apache的RewriteLog指令只能在conf文件中,不能在.htaccess文件,所以必须具有root用户权限,并且修改后需要重启apache,对调试代理复杂性。
- 默认的日志位置 /var/log/httpd 也只能有root用户才能访问。
- 由于一次刷新网页的请求很多(如很多图片、js的请求),导致日志文件比较凌乱,查看也比较困难。
debug-type2
利用301跳转将变量放入新地址栏
#Should use vardump in Query RewriteCond %{QUERY_STRING} vardump RewriteRule (.*) http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI} [R=301,L,QSA]
这里列出来Apache默认的一些变量
#Apache variables HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT REMOTE_ADDR REMOTE_HOST REMOTE_PORT REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE DOCUMENT_ROOT SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ HTTPS
这样就可以轻松的打印出某些具体变量的值,以便检查我们的设置是否正确。
其二,我们可以单独使用下面一行代码
#Goto baidu RewriteRule (.*) http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI} [R=301,L,QSA]
把这行代码放到我们想要的RewriteRule的前面,如果我们的RewriteCond验证成功,则当前URL就可以被跳转,否则,不跳转。这样可以轻松的检查我们书写的RewriteCond是否正确。
此方法虽然没有检查Log文件那样正规,但是实用也易用,不失为一种调试URL重写的好办法。
注:摘自互联网文章,略加修改整合,仅供记录参考
相关引述-官方documentation: http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html