我正在开发一个网络应用程序,其中应该给出其他网站的名称作为参数,我在我的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
。这可能是什么原因?
答案 0 :(得分:1)
由于您使用[^(site.php)]
(并不代表您的想法),它将匹配您网址的最后一个字符。您应该使用RewriteCond,您可以尝试:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+)/?$ site.php?url=$1
这意味着:不要为现有文件或目录重写