<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[urlrewrite模块调试]如何调试Apache的URL重写，详解调试Apache的mod_rewrite模块，在线Apache重写规则测试工具介绍。apache下htaccess不起作用,linux,windows详解]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Web服务器]]></category>
<pubDate>Tue, 29 Jan 2013 07:22:04 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：后知后觉之经过实践证明，其实，调试还是用print_r($_GET);好，见： https://jackxiang.com/post/1950/ ，辅助下正则猫：RegexBuddy，也就解决了90%的问题。<br/><br/>共计有三个方法来调试这个Urlrewrite：<br/>一）调试apache的urlrewrite是个大问题，这儿有两个哥们的博文作了介绍，特转之。<br/><br/>&nbsp;&nbsp; 在旧的Apache的httpd.conf里面是有这样的参数的：<br/><textarea name="code" class="php" rows="15" cols="100">
#Rewrite Log
 RewriteLog logs/drupal001.com-rewrite.log #此处可以写绝对地址
 RewriteLogLevel 3
</textarea><br/><br/>&nbsp;&nbsp; 但是在新版本的Apache中，已经取消了RewriteLog这个参数，如果你加上这个参数只会使你的Apache无法启动！新版本的Apache已经把Rewrite模块的日志也写到了Apache的error.log中，只需要我们制定一下输出的log的级别和trace的深度就好了，例如<br/>LogLevel alert rewrite:trace3<br/><br/>这样可以在Apache默认的日志文件的地方，（一般是/var/log/httpd/），如此以来，可以通过tail -f 的方式来刷新日志文件观察apache URL重写的基本过程。<br/><br/><br/>但是这样的调试有很多弊端，Apache的RewriteLog指令只能在conf文件中，不能在.htaccess文件，所以必须具有root用户权限，并且修改后需要重启apache，对调试代理复杂性。<br/>默认的日志位置 /var/log/httpd 也只能有root用户才能访问。<br/>由于一次刷新网页的请求很多（如很多图片、js的请求），导致日志文件比较凌乱，查看也比较困难。<br/>笔者在Drupal论坛里偶然发现一个比较特殊的方法，这种方法调试Apache URL Rewrite比较简单，此方法只需要在.htaccess即可完成调试。<br/><br/>其一，在.htaccess的 RewriteEngine on 后面添加如下代码<br/><textarea name="code" class="php" rows="15" cols="100">
 #Should use vardump in Query
RewriteCond %&#123;QUERY_STRING&#125; vardump
RewriteRule (.*) http://www.baidu.com/?host=%&#123;HTTP_HOST&#125;,rurl=%&#123;REQUEST_URI&#125; [R=301,L,QSA]
</textarea><br/>这样，如果要调试某些变量，只需要在URL中加入vardump的query即可。<br/><br/>如：http://www.drupal001.com/?vardump<br/>就会跳转到baidu.com，从URL后面的Query即可得到某些参数的值。<br/><br/>这里列出来Apache默认的一些变量<br/><textarea name="code" class="php" rows="15" cols="100">
 #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
</textarea><br/>这样就可以轻松的打印出某些具体变量的值，以便检查我们的设置是否正确。<br/><br/>其二，我们可以单独使用下面一行代码<br/><textarea name="code" class="html" rows="15" cols="100">
#Goto baidu
RewriteRule (.*) http://www.baidu.com/?host=%&#123;HTTP_HOST&#125;,rurl=%&#123;REQUEST_URI&#125; [R=301,L,QSA]
</textarea><br/><br/>把这行代码放到我们想要的RewriteRule的前面，如果我们的RewriteCond验证成功，则当前URL就可以被跳转，否则，不跳转。这样可以轻松的检查我们书写的RewriteCond是否正确。<br/><br/>此方法虽然没有检查Log文件那样正规，但是实用也易用，不失为一种调试URL重写的好办法。<br/><br/>来源：<br/>http://www.drupal001.com/2012/05/apache-rewrite-url-debug/<br/>http://www.nigesb.com/debug-the-mod_rewrite-in-apache.html<br/><br/>.htaccess 修改用不用重启apache：<br/>http://blog.sina.com.cn/s/blog_6e770c2d0100z6w9.html<br/>Apache是一个高度可配置的web服务器，而.htaccess则是高度可配置的重要原因之一。设想一下，如果每一个用户都将自己的配置信息写在httpd.conf文件里，那复杂性和安全性都将是巨大的隐患。<br/><br/>Apache通过.htaccess实现了面向目录的分布式配置功能，通过.htaccess，我们可以为不同的目录定制不同的功能。比如：1）目录默认页面 2）自定义错误页面 3）页面重定向 4）页面访问权限 等等。而且，对于用户来说，修改httpd.conf后，需要重启Apache才能生效；而修改.htaccess文件无需重启Apache使之生效，这也是.htaccess的另外一个优势<br/><br/><br/><br/>二）老外的工具介绍：<br/>调试Apache的url重写规则的时候没有任何的提示和辅助工具，结果也只有成功/不成功两种，这个设置估计会让很多人尝试url重写功能的时候会抓狂，今天无意中有国外友人提供了一个在线的Apache url 重写规则调试器，地址在此：<br/>http://civilolydnad.se/projects/rewriterule/<br/>你可以在页面上的规则框中输入你想调试的规则，然后在上面的url框中输入访问地址查看规则的运行情况<br/><br/>另外这个测试工具暂时功能有限只能测试RewriteRule，像高级点的RewriteCond、RewriteMaps、RewriteBase这些规则都不支持，所以剩下的那些高级功能还是要自己慢慢刷页面调试了。<br/>来自：http://be-evil.org/?post=231<br/>试例测试：<br/>输入： <br/><div class="code"><br/>magento.scnjw.gov.cn/new/abc.html<br/></div><br/>Url规则填写：<br/><div class="code"><br/>RewriteEngine On<br/>RewriteRule ^magento.scnjw.gov.cn/new/(.*)$ http://www.yiphone.info/default/$1<br/></div><br/>得到结果：<br/>Resulting URL: http://www.yiphone.info/default/abc.html<br/>#&nbsp;&nbsp;Match?&nbsp;&nbsp;Rule&nbsp;&nbsp;&nbsp;&nbsp;Resulting URL <br/>1&nbsp;&nbsp;yes&nbsp;&nbsp;RewriteRule&nbsp;&nbsp;^magento.scnjw.gov.cn/new/(.*)$ http://www.yiphone.info/default/$1 http://www.yiphone.info/default/abc.html <br/><br/>三）再就是把这个url通过PHP来输出：<br/>把$_SERVER数组输出查看,print_r($_SERVER);<br/>来自：http://blog.zol.com.cn/2269/article_2268695.html<br/><br/><br/><br/>实践情况如下：<br/>如这个Url，用这个老外写的工具就不行，于是得用第三）个方法，直接print_r($_SERVER)打印来调试Url：<br/>video/index-hot-2.html<br/>UrlRewrite为：<br/>RewriteEngine On<br/>RewriteRule ^video/(index&#124;list)(-(hot&#124;fav&#124;comment&#124;dig&#124;new))?(-(day&#124;week&#124;month))?(-(&#92;&#92;d+))?(-(&#92;&#92;d+))?&#92;&#92;.html$ /index.php?c=rank&amp;a=video&amp;style=$1&amp;index=$3&amp;period=$5&amp;category=$7&amp;page=$9&amp;max_age=1800<br/>通过print_r($_SERVER);die;得到:<br/>[REQUEST_URI] =&gt; /video/index-hot-2.html<br/>[REDIRECT_QUERY_STRING] =&gt; c=rank&amp;a=video&amp;style=index&amp;index=hot&amp;period=&amp;category=2&amp;page=&amp;max_age=1800<br/>[QUERY_STRING] =&gt; c=rank&amp;a=video&amp;style=index&amp;index=hot&amp;period=&amp;category=2&amp;page=&amp;max_age=1800<br/><br/><br/><br/>可能出现下面这三种的错误可能性： <br/>第一种：启用 rewrite 和 .htaccess 设置<br/>rewrite设置：找到apache的配置文件httpd.conf文件，找到：#LoadModule rewrite_module modules/mod_rewrite.so去掉前面的#号。<br/>改为：LoadModule rewrite_module modules/mod_rewrite.so<br/>.htaccess设置：<br/>windows里面这样设置：AccessFileName htaccess&nbsp;&nbsp;<br/>linux里面这样设置：AccessFileName .htaccess。<br/>linux比windows里面文件名前面多了一个点。如果没找到AccessFileName自己在httpd.conf文件最后面加上。<br/> <br/>第二种：AllowOverride 的设置。<br/>默认AllowOverride 为AllowOverride none。把这个改为：AllowOverride All。如果配置了多个虚拟目录需在每个目录里面开启，实例：<br/>&lt;VirtualHost *:80&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot &quot;D:SvnTracsvnSVNRepositorywwwroot&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerName 127.0.0.1:80<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectoryIndex index.html index.htm index.php index.shtml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory &quot;D:SvnTracsvnSVNRepositorywwwroot&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options Indexes FollowSymLinks<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride ALL<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br/>&lt;/VirtualHost&gt;<br/>&lt;VirtualHost 127.0.0.2:80&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot &quot;D:/SvnTrac/svn/SVNRepository/www/&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerName 127.0.0.2:80<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectoryIndex index.html index.htm index.php index.shtml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory &quot;D:/SvnTrac/svn/SVNRepository/www/&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options Indexes FollowSymLinks<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride ALL<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br/>&lt;/VirtualHost&gt;<br/> <br/>第三种：Options 的设置<br/>默认设置是：Options Indexes FollowSymLinks<br/>如果改成以下设置后，就会出错<br/>Options Indexes FollowSymLinks MultiViews Includes （出错）<br/>如果要启用,目录浏览 MultiViews<br/>服务器端包含 Includes （&lt;!–#include virtual=”top.htm” –&gt;）<br/>为了简单可以设置为：Options All<br/> 前两种是配置中常见的错误，第三种一般少见，最后提醒大家一下，记得配置文件改好后一定要重启服务器啊。有问题，留言，或收听微薄。<br/><br/>来源：http://www.canphp.com/article/show-123.html<br/>http://www.jb51.net/article/25476.htm<br/><br/><br/>实践情况，自己试下如下：<br/>RewriteEngine On<br/>RewriteBase /<br/>RewriteRule ^(.+).html$ test.php?id=$1<br/>后来访问：http://www.happycun.com/11.html<br/>跳转到了test.php <br/>&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_r($_SERVER);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_r($GET);//这个有用参考：https://jackxiang.com/post/1950/<br/>?&gt;<br/><textarea name="code" class="JS" rows="15" cols="100">
Array
(
&nbsp;&nbsp;&nbsp;&nbsp;[REDIRECT_STATUS] =&gt; 200
&nbsp;&nbsp;&nbsp;&nbsp;[HTTP_HOST] =&gt; www.happycun.com
&nbsp;&nbsp;&nbsp;&nbsp;[REQUEST_URI] =&gt; /11.html
&nbsp;&nbsp;&nbsp;&nbsp;[SCRIPT_NAME] =&gt; /test.php
&nbsp;&nbsp;&nbsp;&nbsp;[REMOTE_ADDR] =&gt; 192.168.1.101
&nbsp;&nbsp;&nbsp;&nbsp;[DOCUMENT_ROOT] =&gt; /var/www
</textarea>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [urlrewrite模块调试]如何调试Apache的URL重写，详解调试Apache的mod_rewrite模块，在线Apache重写规则测试工具介绍。apache下htaccess不起作用,linux,windows详解]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>