【问题标题】:Issue with .htaccess mod rewrite.htaccess mod 重写问题
【发布时间】:2014-04-14 14:26:15
【问题描述】:

我正在创建一个 CMS,其中给定页面的样式和格式是根据页面类型(常规、成员、下载等)动态生成的。过去我使用以下 .htaccess 来识别页面类型:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^general/(.*)$ general.php?title=$1 [QSA,L]

效果很好,但需要我为每种页面类型创建一个渲染页面...general.php、member.php、download.php 等。

我想做的是……

通过 .htaccess 有一个通配符来识别页面类型,以使所有页面都从单个 [page.php] 文件呈现,以便可以动态创建页面类型,而无需为每个页面创建呈现页面输入。

我的结果中出现 $ 符号时遇到问题。我只知道 .htaccess 是危险的。

这是我的 PHP 测试

<?php

$type = $_REQUEST['type'];
$title = $_REQUEST['title'];

echo $type.'<br>'.$title;

?>

这个网址:

http://my-site.com/general/this-is-a-general-page

将 .HTACCESS 重写规则设置为:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)/(.*)$ temp.php?type=$1$&title=$2 [QSA,L]

产品:

general$
this-is-a-general-page

我不明白为什么 $ 位于页面类型的末尾。我也试过删除 $:

RewriteRule ^(.*)/(.*) temp.php?type=$1$&title=$2 [QSA,L]

但我得到了相同的结果。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    你可以使用:

    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^([^/]+)/([^/]+)/?$ temp.php?type=$1&title=$2 [QSA,L]
    

    在你的规则中$1 之后有一个流浪的$

    PS:我还稍微调整了您的正则表达式以提高效率。

    【讨论】:

    • 非常感谢@anubhava ...工作得很好。当脚本允许时,我会给你检查...非常感谢你的帮助。
    • 令人惊讶的是你的眼睛变得瞎了......我盯着那行代码重读了无数次,从来没有注意到额外的美元......也感谢你的调整
    • 是的,我知道有时它会发生在我们所有人身上。花了几个小时后,我们发现脚本中缺少一个 $%
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多