人
我的代码存在问题
问题是我的php文件获得了如下所示的$ _GET值:
// Look if there is a page asked
if(isset( $_GET['section'] )) {
// Page asked lets see what we do with it
if(isset( $_GET['subtopic'])) {
$path = "content/" . $_GET['section'] . "/" . $_GET['subtopic'] . ".php";
if(file_exists($path)) {
// Asked ?section=&subtopic= lets check if exist then include
include($path);
}
else {
// Asked ?section=&subtopic= not found throw 404
echo '404 - not found';
}
}
else {
$path = "content/" . $_GET['section'] . "/index.php";
if(file_exists($path)) {
// Asked ?section= existed include
include($path);
}
else {
// Asked ?section not found throw 404
echo '404 - not found';
}
}
}
else{
// No page asked throw default page
include('content/home/news.php');
}
所以当我的ip就像这个IP /?section = home& subtopic = news
它代表的是该部分是应该在上面的代码中显示的文件夹。但我使用.htaccess文件制作?section = home使其成为IP / home /?subtopic = news但是当我做IP / home /?subtopic = news它给我/ home / not found我觉得问题是在我的.htaccess文件中:
RewriteEngine on
RewriteBase /
RewriteRule ^(\W+)/$ /index.php?section=$1
RewriteRule ^(\w+)/(\w+)/$ /index.php?section=$1&subtopic=$2
这是我的.htaccess文件来完成它,但它只是不想工作所以我希望你们能帮助我。
亲切的问候,
杰弗里
答案 0 :(得分:0)
好吧,我建议你做一点容易,只传递一个变量比两个变量更容易,然后你可以处理变量来提取你需要的2个数据。为此,您必须将此代码放在.htaccess
文件
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?data=$1 [QSA]
现在在您的index.php
文件中,您拥有$_GET['data']
上的2个数据,所有您需要做的就是像这样爆炸字符串
$data = explode("/", $_GET['data']);
$section = $data[0];
$subtopic = $data[1];
然后你可以做所有的测试......不要忘记激活" rewrite module
"在您的Apache服务器上
答案 1 :(得分:0)
如果您使用' /'在正则表达式中 - 更好地需要在/ /之前添加符号\
这个.htaccess指令有效:
RewriteEngine on
RewriteBase /
RewriteRule ^(\w+)\/$ /index.php?section=$1
RewriteRule ^(\w+)\/(\w+)\/$ /index.php?section=$1&subtopic=$2
还需要启用apache .htaccess文件。 您需要修改包含AllowOverride None的行以在apache config或virtualhost文件中读取AllowOverride All。这告诉Apache,允许.htaccess文件覆盖以前的指令是可以的。 例如:
<Directory /var/www/> # /var/www/ - web site root directory
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
在此更改生效之前,您必须重新加载Apache。