2012-05-26 278 views
0

我试图找到一个问题的答案,我脑海中曾有过这样的问题,但似乎找不到它。重写php url的规则

怎样才能使一些PHP网址与“?”和 “=” 到/

实施例一(1):

example.com/user.php?profile=example 

到:

example.com/user/profile/example 

实施例2(2):

example.com/forum.php?thread=example-in-an-example 

到:

example.com/forum/thread/example-in-an-example 

一样,是以第二“/”(斜杠)为“?”的码第三个和其余作为一个“=”,所以我可以自由使用它,而不是为每个页面制作一个新的...

LIKE:/ forum(或任何其他人)就像页面本身 AND: /线程(或任何其他)是像$ _GET AND:/示例功能于一个-示例(或任何其他)是像值到$ _GET

EXTRA: 这里是从的Jeroen一个代码:

RewriteRule ^(.*)/(.*)/(.*)/$ $1.php?$2=$3 [L] 

问题一(1):会喜欢时: “example.com/forum” 或 “example.com/user” 其给予404错误 问题两(2):当使用像“example.com/forum/thread/test-thread/reply/2”链接它给404错误,(supose到循环用“&”和“=”,使得第一真实后一个所以其能够使用一个以上的$ _GET)

+0

您使用的是控制器吗?你能修改你的PHP代码吗?你是从头开始写东西吗?用户浏览器地址栏中显示的URL是什么?干净的网址或查询字符串的网址? – dAm2K

回答

4

添加到您的.htaccess文件:

RewriteEngine On 
RewriteRule ^user/profile/(.*)/$ user.php?profile=$1 [L] 
RewriteRule ^forum/thread/(.*)/$ /forum.php?thread=$1 [L] 

或者更宽泛的版本...

RewriteEngine On 
RewriteRule ^(.*)/(.*)/(.*)/$ $1.php?$2=$3 [L] 

确保Apache的mod rewrite已启用!

1

如果你有完全访问应用程序,你可以修改代码,我可以提交你一些技巧,我通常用我的REST工具。

AllowOverride全部里面你的apache配置来启用.htaccess文件。 确保有的LoadModule的mod_rewrite模块了。

创建一个.htaccess文件到您的Web服务器的根目录(应用程序路径),并把这个里面的东西:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 

创建一个名为索引文件。PHP和放这里面,这将是你的控制器:

<? 
     // echo "REQUEST_URI: " . $_SERVER['REQUEST_URI'] . "</br>\n"; 
     $controller = explode("/", $_SERVER['REQUEST_URI']); 
     //print_r($controller); 

     $resource = $controller[1]; 
     $operation = $controller[2]; 
     $operation_value = $controller[3]; 

     echo "Requested resource: $resource, opetation: $operation, value: $operation_value<br>\n"; 

     switch($resource) { 
     case 'user': 
       echo "User requested\n"; 
       //require_once("user.php"); 
       break; 
     case 'forum': 
       echo "Forum requested\n"; 
       //require_once("forum.php"); 
       break; 
     /* add any other resource */ 
     default: 
       echo "Requested page was not found.\n"; 
       break; 
     } 
?> 

当用户呼叫http://example.com/user/profile/ZeroXitreo页面将呈现为:

Requested resource: user, opetation: profile, value: ZeroXitreo 
User requested 

当用户呼叫http://example.com/forum/thread/example-in-an-example的页面将是:

Requested resource: forum, opetation: thread, value: example-in-an-example 
Forum requested 

阅读控制器的PHP代码,我认为这是相当自我解释。