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

时间:2012-04-13 06:57:57

标签: php regex .htaccess url-rewriting

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

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。这可能是什么原因?

1 个答案:

答案 0 :(得分:1)

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

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

这意味着:不要为现有文件或目录重写