无法通过.htaccess将动态网址转换为静态网址

时间:2012-03-19 15:29:51

标签: php .htaccess mod-rewrite

我正在改写我的问题。 下面我给出了我想要做的所有细节,以及我得到的结果。我希望这次能够非常清楚。我在这里有一个样本页面www.broadcast2world.com/samples.php。 我们在页面上看到的所有链接和数据都来自数据库。现在假设我们点击“更多信息”链接,查看特定视频社交控制。该视频的特定href被触发为<a href="video.php?pid='.$id.'">。它以http://www.broadcast2world.com/video.php?pid=66.

格式将其ID传递给url

我使用

将该id识别为变量
if(!isset($_GET['pid'])){
    $pageid='66';
}
else{
  $pageid=$_GET['pid'];  
} 

使用$ pageid变量,我运行一个查询,最终为该特定视频准备页面。

我的搜索引擎优化人员需要的是www.broadcast2world.com/video/name-of-the-video格式的网址。

现在的问题是,如果我做了一个mod_rewrite修正案,下面是Ben的精彩解释,我无法弄清楚,如何将该视频名称与其ID相关联。我确信在为视频创建特定网址时必须要修改一些内容,如上所述。但我真的不知道是什么?再次感谢您的精彩支持

2 个答案:

答案 0 :(得分:2)

该网站生成的.htaccess代码存在许多问题。

  • 句点字符(.)应在RewriteRule指令的左侧进行转义 - 即\.php
  • 不考虑查询字符串(这是您在下面解释的问题的主要原因)。
  • 没有指示使用的重定向类型。临时?永久?
  • 没有RewriteBase指令。不是必需的,因为/被视为默认值,但为了便于阅读,我倾向于使用它。

重写指令尤其仅考虑REQUEST_URI组件。以下内容来自mod_rewrite manual page

  

REQUEST_URI请求的URI的路径组件,例如   “/index.htm”明明。这显然排除了查询字符串   可用作名为QUERY_STRING的变量。

以下代码在注释中进行了解释,此处的调试信息可以在下面找到。

# Enable rewrite engine http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine
RewriteEngine On

# Sets the base URL for per-directory rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
RewriteBase /

# Match the regular expression ^pname=...$ with the QUERY_STRING variable as the subject
# Query string starts with pname (`^`). 
# Matches exactly pname=overviewvideos.
# Must end with overviewvideos (`$`)
RewriteCond %{QUERY_STRING} ^pname=overvidevideos$

# If the above condition is met, redirect to the 2nd parameter.
# Note the escaped period (\.)
# Note the status code 302 (Found, temporary) Can be 301 for permanent etc.
# Note the L flag - this prevents further rules being processed if the conditions are met. (L for Last)
# Note that at this stage we are back to matching the REQUEST_URI, so just allvideos.php in our regular expression. Must start and end with the string allvideos.php
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L]

输入网址:http://www.yoursite.com/allvideos.php?pname=overvidevideos

RewriteCond %{QUERY_STRING} ^pname=overvidevideos$  This condition was met
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L]    
    This rule was met, the new url is http://www.yoursite.com/allvideos.php?pname=Overview%20Videos
    Test are stopped, because of the R in your RewriteRule options. A redirect will be made with status code 302

输出网址:http://www.yoursite.com/allvideos.php?pname=Overview%20Videos

要重复这些规则,您可以复制以RewriteCond和RewriteRule开头的行。

答案 1 :(得分:1)

替换以下行

RewriteRule ^allvideos.php/pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

使用以下代码

RewriteRule ^allvideos.php?pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

请注意用/

替换?

同样对第二次重写规则进行相同的更改