.htaccess url重写忽略参数的最后一个字符

问题描述:

我正在开发一个web应用程序,其中的其他网站的名称应该作为参数给出,我在我的apache web服务器上使用.htaccess文件重写URL,这是代码我写在我的.htaccess文件:.htaccess url重写忽略参数的最后一个字符

RewriteEngine On 
RewriteRule ^([a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+)[^(site.php)] site.php?url=$1 
RewriteRule ^([a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+)[^(site.php)]/ site.php?url=$1 

我写这[^(site.php)]因为它传递site.php作为参数作为site.php是我的正则表达式匹配。这是工作的正确方法,但唯一的问题是,该参数的最后一个字符被省略,例如,当我书面方式:

www.mywebsite.com/google.com 

其采取google.co并省略最后m。如果通过google.co.in,则取google.co.i并省略n。这可能是什么原因?

+0

所有的人物失去一个字符集内的任何特殊意义,所以'[^(site.php )]'手段'不是任何字符(,s,i,t,...' – 2012-04-13 08:59:38

由于您使用的是[^(site.php)](并不代表您的想法),因此它会与您网址的最后一个字符相匹配。您应该使用的RewriteCond,你可以尝试:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+)/?$ site.php?url=$1 

至极表示:不重写现有的文件或目录

+0

是的,它的工作。Thanx很多... :) – Sourabh 2012-04-13 07:15:51