RewriteRule匹配所有字符

时间:2014-01-19 11:00:16

标签: php .htaccess mod-rewrite

所以,我正在尝试编写一个htaccess文件,它会将所有内容重写回根索引文件并在其后添加一个查询,例如

example.com/cheese/将转到example.com/index.php?cheese/

example.com/cheese将转到example.com/index.php?cheese

example.com/bob/fred将转发example.com/index.php?bob/fred

根据需要进入多层,有人有建议吗?

目前正在尝试此操作,但它无效:

RewriteEngine on
RewriteRule ^(.*)/?$ index.php?$1

我知道它无法正常工作,因为我正在使用以下内容对其进行测试,但查询输出不正确。

<?php
    $page = $_SERVER['QUERY_STRING'];
    echo $page;
?>

2 个答案:

答案 0 :(得分:0)

您可以在DOCUMENT_ROOT/.htaccess文件中使用此规则:

RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !-f将避免循环并跳过有效文件,如css,js图像被重写为index.php

将查询字符串作为:

访问
$_SERVER["QUERY_STRING"]

答案 1 :(得分:0)

首先,必须启用mod_rewrite

<IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule /(.*) index.php?$1
</IfModule>

但如果使用$_SERVER['QUERY_STRING']是必要的,我建议使用:

<IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule . index.php
</IfModule>

然后从$_SERVER['REQUEST_URI']检索网址,因为您的解决方案会中断每个GET请求。