以下一组重写规则工作正常,直到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
*只要网址中有一个点,当逗号,分号或其他字符没有问题时它将无效
答案 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);
}