0

我正在开发一个网络应用程序,其中应该将其他网站的名称作为参数给出,我正在使用我的 apache 网络服务器上的 .htaccess 文件重写 url,这是我在 .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。这可能是什么原因?

4

1 回答 1

1

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

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

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

于 2012-04-13T07:13:16.437 回答