重写php网址的规则

时间:2012-05-26 22:19:17

标签: php .htaccess mod-rewrite

我试图找到一个我心中的问题的答案,但似乎我找不到它。

如何用“?”创建一些php网址?和“=”到/

示例一(1):

example.com/user.php?profile=example

为:

example.com/user/profile/example

示例二(2):

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

为:

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

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

LIKE:/ forum(或任何其他人)就像页面本身一样 AND:/ thread(或任何其他)就像$ _GET一样 AND:/ example-in-an-example(或任何其他)类似于$ _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错误,(在第一次真实之后,用“&”和“=”循环)一个,所以它能够使用多个$ _GET)

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果您具有对应用程序的完全访问权限并且您可以修改代码,我可以向您提交我通常用于REST实用程序的一些技巧。

在您的apache配置中放置 AllowOverride All 以启用.htaccess文件。 确保 LoadModule mod_rewrite 模块。

在您的Web服务器文档根目录(您的应用程序路径)中创建一个.htaccess文件并将其放入:

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

创建一个名为index.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代码,我认为这是非常自我解释的。