.htaccess重写规则不起作用

时间:2014-01-28 08:28:44

标签: php regex apache .htaccess mod-rewrite

简单的问题,但目前我不明白htaccess ...所以我希望你能帮助我。

这是我的.htaccess文件:

#RewriteEngine On

#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-l

#RewriteRule ^(.+)$ index.php?page=$1 [QSA]


RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ $1.php [L]

在旧服务器上它只适用于第一部分。所以如果我这样打开url:test.com/foo/bar 如果没有index.php,bar.php将会打开。 如果我打开这样的网址:test.com/foo/bar/25/3 25和3位于$_GET['page']

我用googled somthing找到了第二部分,但它不应该工作。他告诉我他会打开bar.php但是没有在服务器上找到它。如果我查看我的文件夹中有文件。

希望有人可以提供帮助,非常感谢。

编辑:

新问题,.htaccess运行良好,但如果我登录一边,我会重定向到目录test.com/foo/logged ...有一个新的复杂菜单。

首先我将$_GET分开:

$url = explode("/", $_GET['page']);

这是记录的/ index.php:

<?php if( $_SESSION) : ?>

<?php include("start.php"); ?>

<?php else : ?>

<?php include(BASE_URL."/login.php"); ?>

<?php endif; ?>

这是我的start.php:

<?php if( strlen($url[0]) > 0 ) : ?>

<?php include("packages/".$url[0]."/view/".$url[1].".php"); ?>      

<?php else: ?>

<? include "games.php"; ?>

<? endif; ?>

现在,如果我在记录区域,我无法打开任何菜单链接,如:foo / bar。 start.php中的链接现在必须查看:packages/foo/view/bar.php

但该网站总是与logging / index.php相同......

1 个答案:

答案 0 :(得分:1)

你的规则如下:

DirectoryIndex index.php

RewriteEngine On
RewriteBase /test/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/test/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]