我想在最后创建一堆没有扩展名的文件。最简单的方法是这样做:
/usa/index.php
/usa/alaska/index.php
/usa/alabama/index.php
/usa/california/index.php
我想做的是这个
/usa/alaska.php
/usa/alabama.php
/usa/california.php
并将其显示为:
/usa/alaska
/usa/alabama
/usa/california
但是,我还想增加一个级别,即城市
/usa/alaska/adak.php
/usa/alaska/anchorage.php
/usa/california/los-angles.php
我不想要" .php"显示,但每个状态都作为文件和目录存在。我想要的是一个htaccess规则,它提供文件的文件版本,而不是默认的目录。我还想从文件末尾删除.php,以便最终结果看起来像
/usa
/usa/alaska (alaska.php)
/usa/alaska/adak (adak.php)
我知道我可以通过创建所有目录并为每个目录使用index.php来接近这一点,但随后我会有数千个目录,每个目录中都有一个文件,并且更新是一个痛苦的屁股。我宁愿在一个目录中包含1000个文件,而不是包含1个文件的1000个目录。
拜托,有人能指出我正确的方向,并知道我正在为所有50个州做这件事。
吉姆
答案 0 :(得分:1)
我还建议使用单个php(例如index.php
)文件,并将所有以usa
开头的网址重定向到它,而不是将它们分隔在不同的目录和文件中。您需要几个重写规则,如下所示
RewriteEngine On
RewriteRule ^usa/([^/.]+)$ index.php?state=$1 [L]
RewriteRule ^usa/([^/]+)/([^/.]+)$ index.php?state=$1&city=$2 [L]
然后在您的index.php
中,您只需要检查$_GET
参数。
<强>更新强>
如果您觉得使用数据库并从中提取所需数据不够舒服,则可以始终使用这些参数动态地包含/要求所需的文件。像这样的东西
<?php
$source = ''; //or the 'ROOT' directory
if(isset($_GET['state'])) $source .= $_GET['state'].'/';
if(isset($_GET['city'])) $source .= $_GET['city'].'.php';
include($source); // here $source would be something like 'alaska/adak.php'
// and is assumed that the dir 'alaska' is on the same
// level as 'index.php'
?>
但要回答原始问题,您可以使用以下.htaccess
RewriteEngine On
RewriteRule ^usa/([^/.]+)$ usa/$1.php [L]
RewriteRule ^usa/([^/]+)/([^/.]+)$ usa/$1/$2.php [L]
答案 1 :(得分:0)
如何只创建一个文件:
/usa/index.php
使用
$_SERVER["REQUEST_URI"]
您可以阅读当前的URI。
好吧,现在如果用户输入“http://domain.foo/usa/alaska”,他当然会收到404错误。
但要改为调用index.php
,您可以将此行写入.htaccess
:
ErrorDocument 404 /usa/index.php
现在index.php
接收写入URI的所有内容,您可以匹配结果并包含文件或处理错误。
但也许只有.htaccess有更好的解决方案,不知道。 :)