无法让mod_rewrite工作

时间:2012-09-20 19:23:13

标签: php apache mod-rewrite

我想从网址获取网址:

192.168.0.1/movie-page.php?id=123

为:

192.168.0.1/movie/movie-name

甚至(现在):

192.168.0.1/movie/123

我通过使用这个网址来简化它(以使某些工作正常):

192.168.0.1/pet_care_info_07_07_2008.php至192.168.0.1/pet-care /

我的.htaccess文件:

RewriteEngine On
RewriteRule ^pet-care/?$ pet_care_info_07_07_2008.php [NC,L]

我做错了什么?我尝试了很多组合,但没有运气,我的耐心已经不多了......

我在我的本地NAS上运行它,默认情况下应启用mod_rewrite。我通过在.htaccess文件中输入随机字符串并打开页面测试了.htaccess,我收到404错误。我认为这意味着正在使用.htaccess,因为如果文件格式错误,页面将停止运行。

2 个答案:

答案 0 :(得分:2)

如果要重写: 192.168.0.1/movie-page.php?id=123也是

192.168.0.1/movie/movie-name192.168.0.1/movie/123

然后你会做类似的事情,但是会要求你手动为你想要的任何新路线(花哨网址)添加重写,最后你可能希望你的脚本动态创建路由或者只有一个切入点来消毒: / p>

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^movie/([a-zA-Z0-9-]+)$ movie-page.php?id=$1 [L]

所以更好的方法是通过重写来路由所有内容:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

然后通过将$_GET['route']explode()

分开来处理路线
<?php 
//192.168.0.1/movie/movie-name
$route = (isset($_GET['route'])?explode('/',$_GET['route']):null);

if(!empty($route)){
    //example
    $route[0]; //movie
    $route[1]; //movie-name
}
?>

答案 1 :(得分:0)

你想要这样的东西:

RewriteRule ^movie/([0-9]*)$ /movie-page.php?id=$1 [L,R=301]

这将为电影ID版本提供数字ID。