我想创建一个脚本,将网站中请求的每个文件夹作为参数传递。
例如,如果有人要求:
www.example.com/foo
...这将被重定向到主 index.php 并作为参数传递,在请求时得到相同的结果www.example.com/index.php?foo
请注意,请求的文件夹将是随机的,所以我无法预测文件夹并将 php 脚本放在那里。
我应该通过 HTACCESS 处理所有 404 请求吗?还是有更好的解决方案?
我想创建一个脚本,将网站中请求的每个文件夹作为参数传递。
例如,如果有人要求:
www.example.com/foo
...这将被重定向到主 index.php 并作为参数传递,在请求时得到相同的结果www.example.com/index.php?foo
请注意,请求的文件夹将是随机的,所以我无法预测文件夹并将 php 脚本放在那里。
我应该通过 HTACCESS 处理所有 404 请求吗?还是有更好的解决方案?
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
}
?>
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}
您需要的是url rewrite。网络上有很多关于它的信息。
我假设您使用的是 Apache。
听起来您真正需要的是 RewriteRule,请在此处查看 mod_rewrite:http ://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
您正在寻找的称为“路由”,其中 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 重写文件。这使您可以更好地控制路由,尤其是在不允许编辑服务器配置文件的托管站点中。