使用正则表达式和.htaccess&清理URL。 mod_rewrite的

时间:2016-05-02 19:00:03

标签: regex .htaccess mod-rewrite

我在.htaccess文件中使用以下代码

RewriteRule ^([^/]*)/([^/]*)$ /view_basket.php?order_id=$1&pin=$2 [L]

目标是重定向一个干净的网址,如下所示

http://www.zire20.ir/77438/9512  

到这个

http://www.zire20.ir/view_basket.php?order_id=77438&pin=9512  

事情是它在我以前的服务器上工作,但现在我改为godaddy托管,它不工作!任何想法?

p.s:

我的整个.htaccess文件如下所示:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^zire20.ir [NC]
RewriteRule ^(.*)$ http://www.zire20.ir/$1 [L,R=301]
RewriteRule ^([^/]*)/([^/]*)$ /view_basket.php?order_id=$1&pin=$2 [L]

1 个答案:

答案 0 :(得分:1)

  

RewriteRule ^([^/]*)/([^/]*)$ /view_basket.php?order_id=$1&pin=$2 [L]
  很多照片都没有加载!

您当前规则的问题在于您无条件地重写 。任何包含单个斜杠的URL都将被重写。我想你的一些(静态)照片网址符合这种模式。

通常的做法是,只有在与现有文件(或目录)不匹配时才重写URL:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ /view_basket.php?order_id=$1&pin=$2 [L]

这确保仅针对不存在的文件(不是文件或目录)重写请求。我也使模式更具限制性,因此在斜杠(+)之前和之后必须有1个或更多个字符,而不是0或更多(*)。

  

事情是它在我以前的服务器上工作

我看不出这是怎么可能的,除非以前的服务器上的URL结构不同?