0

我在 php 编码方面相对较新,并且正在编写自己的 MVC 东西。我宁愿这样做而不是使用框架 b/c 我会这样更好地理解它:)。

目前,我的网站设置如下:

domain.com/services

会改写成 index.php?page=services

在 index.php 内部,我有代码可以根据 URI 字符串加载正确的模板。但是,我想让我的网站比这更复杂一些......

我希望服务器根据 uri 字符串加载适当的 php 文件。做这个的最好方式是什么?也许 index.php 真的读取并执行了另一个 php 文件?

谢谢!

编辑:我当前处理我现在正在做的事情的 htaccess 是:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
#RewriteBase

# Protect hidden files from being viewed
<Files .*>
        Order Deny,Allow
        Deny From All
</Files>

RewriteCond %{HTTP_HOST} ^domain.net$
RewriteRule (.*) http://www.domain.net$1 [R=301]

#remove trailing slash
RewriteRule ^(.+)/$  /$1 [R=301,L]

# Protect application and system files from being viewed
RewriteRule ^(?:templates|configs|templates_c)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule ^([^/\.]+)/?$ index.php?page=$1

我应该改变什么来实现我想要的?我只是在想:

RewriteRule ^(.*)$ index.php [L,NS]

接着:

list( $controller, $function, $params ) = explode( '/', $uri, 3 );
$params = explode( '/', $uri );

此时执行正确代码的好的 php 方法是什么?只包括文件?

4

2 回答 2

0

最好的方法是使用.htaccess ModRewrite进行 URL 更改,以便您压缩可读的 URL 将正确转换为您的脚本路径

我自己在这种情况下的工作方式:

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

<?php
list($url_part, $url_page) = explode('/', $_GET['prmtrs']);
?>

当然,您需要在使用 $_GET 之前从您的数据中清除数据,这只是简化示例以更清晰地展示想法。

于 2012-05-06T20:22:57.050 回答
0

您可以根据 URI 创建多个重写规则。这是一个简单的示例 - 您可以使用 RewriteCond 制作更复杂的示例。

# Rewrite all URIs beginning with 'a' to index1.php
RewriteRule ^(a[^/\.]+)/?$ index1.php?page=$1

# Rewrite all URIs beginning with 'b' to index2.php
RewriteRule ^(b[^/\.]+)/?$ index2.php?page=$1

如果你真的想要不同的文件来处理不同类型的 URI,这可能是要走的路,除非你有几十个这样的项目。否则,您可以从 index.php 中找出调度

于 2012-05-06T21:09:35.237 回答