.htaccess SEF重写URL中的句点(点)

时间:2014-07-14 03:19:42

标签: php apache .htaccess mod-rewrite url-rewriting

以下一组重写规则工作正常,直到URL中有一个句点,如果存在点,404找不到错误显示,则表示存在错误。删除点将使代码SEF url工作,但在这种情况下,数据库中没有匹配项。我看到了许多解决方案,但无法解决这个问题,非常感谢任何帮助。谢谢! :)

RewriteRule ^([^/.]+)$ index.php?p1=$1 [L]
RewriteRule ^([^/.]+)/([^/.]+)$ index.php?p1=$1&p2=$2 [L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)$ index.php?p1=$1&p2=$2&p3=$3 [L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4 [L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [L]

以下是URL的示例,原始和SEF重写之后:

  

的index.php郎= EN&安培; CO =佛罗里达&安培; CT =迈阿密&安培; ST =有限公司%系统200p%20City%20Blvd%20nr%20801&安培;拉链= 10475

     

作品:/ en / Florida / Miami_Beach / Euclid_Ave_801 / zip-33139

     

DOESNT:/en/New_York/Bronx/Co._Op._City_Blvd_nr._801/zip-10475

*只要网址中有一个点,当逗号,分号或其他字符没有问题时它将无效

2 个答案:

答案 0 :(得分:1)

您也可以使用PHP来处理您的网址,如下所示:

在.htaccess中:

RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php?$1 [L]

在index.php中:

$uri = explode('/', $_SERVER['QUERY_STRING']);

然后探索$ uri数组或将其更改为多个变量,然后您不必修改整个脚本:

foreach( $uri as $k => $v ){

    $_GET['p'.$k+1] = $v;
}

答案 1 :(得分:0)

显然,这与引起部分问题的另一条规则有关。以下是我们如何解决它,受到Bob0t的回答的启发:

这是问题的一部分:

# require www prefix for all urls of ANY domain & for parked domains by Yatko.com
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.               [NC]
RewriteCond %{HTTP_HOST} ^([^.]+\.[a-z]{2,6})$ [NC]
RewriteRule ^(.*)$       http://www.%1/$1      [R=301,L]

将其更改为:

# require www prefix for all urls of ANY domain & for parked domains by Yatko.com
RewriteCond %{HTTP_HOST} !^www\.               [NC]
#RewriteCond %{HTTP_HOST} ^([^.]+\.[a-z]{2,6})$ [NC]
RewriteRule ^(.*)$       http://www.%1/$1      [R=301,L]
RewriteRule ^(.+)/$ http://www.yatko.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)\.(.*)$ $1|$2

以及PHP代码的一些变化:

foreach($_req as $rk => $rv){
        $_req[$rk] = str_replace("|", ".", $rv);
    }
相关问题