3

我想创建一个脚本,将网站中请求的每个文件夹作为参数传递。

例如,如果有人要求:

www.example.com/foo

...这将被重定向到主 index.php 并作为参数传递,在请求时得到相同的结果www.example.com/index.php?foo

请注意,请求的文件夹将是随机的,所以我无法预测文件夹并将 php 脚本放在那里。

我应该通过 HTACCESS 处理所有 404 请求吗?还是有更好的解决方案?

4

5 回答 5

6

In your url foo is a parameter key, if you mean to have it like that then what value would it have?

Perhaps your confusing it with a routing structure where you pass the entire url to a routing script that handles the request

The rewrite your looking for is this:

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

Then in your index you split the url like this:

<?php 
$parts = isset($_GET['route']) ? explode('/',$_GET['route']) : array();
?>

Then an example URL would look like: www.example.com/foo/bar/baz

$parts[0] = foo
$parts[1] = bar
$parts[2] = baz

then if your looking for a folders/files existence, something like this:

<?php 
if (isset($parts[0]) && file_exists('./'.basename($parts[0]))) {
    //Folder or file exists
} else {
    //Folder or file does not exist - 404
}
?>
于 2012-05-03T03:32:54.653 回答
4

I think using htaccess is a solution.

RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php?$1 [L]

That one will rewrite url not followed by index.php, images or robots.txt to /index.php?{DIR OR VARS}

于 2012-05-03T03:31:44.057 回答
0

您需要的是url rewrite。网络上有很多关于它的信息。

于 2012-05-03T03:23:59.193 回答
0

我假设您使用的是 Apache。

听起来您真正需要的是 RewriteRule,请在此处查看 mod_rewrite:http ://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

于 2012-05-03T03:24:16.510 回答
0

您正在寻找的称为“路由”,其中 url 的“文件夹”被转换为称为“段”的参数。

index.php据我所知,您需要一个“入口点,通常是”解析其余路径的顶层。

http://example.com/index.php/foo/bar/baz
                      ^----entry point

index.php可以通过服务器重写规则删除该部分,留下您

http://example.com/foo/bar/baz

这是一种更“可扩展”的方式,因为您只会在 PHP 中编辑“url 解析器”逻辑(通常作为 include in 加载index.php),而不是编辑.htaccess或服务器的 url 重写文件。这使您可以更好地控制路由,尤其是在不允许编辑服务器配置文件的托管站点中。

于 2012-05-03T03:26:09.667 回答