mod重写howto

时间:2009-11-03 12:05:36

标签: mod-rewrite

我对以下网址使用以下mod重写代码:www.site.com/play/543

RewriteEngine On
RewriteRule ^play/([^/]*)$ /index.php?play=$1 [L]

如何扩展此功能,以便我可以使用www.site.com/contactwww.site.com/about

这样的网址

2 个答案:

答案 0 :(得分:2)

RewriteRule ^(play|contact|about)/([^/]*)$ /index.php?$1=$2 [L]

可能会做到这一点。现在请求/ play / foo指向/index.php?play=foo和/ contact / bar指向/index.php?contact=bar等等。

编辑,从评论“关于和联系永远不会被设置。”

然后使用两次重写;

RewriteRule ^play/([^/]*)$ /index.php?play=$1 [L]
RewriteRule ^(contact|about)/?$ /index.php?a_variable_for_your_page=$1 [L]

答案 1 :(得分:1)

大多数PHP框架使用的常用方法是将除现有文件(通常是资产* .png,* .js * .css)和/或公共目录之外的任何用户请求传递给PHP脚本,然后解释在PHP方面的路线。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d #if not an existing directory
    RewriteCond %{REQUEST_FILENAME} !-f #if not an existing file
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] #pass query string to index.php as $_GET['url']
</IfModule>

在PHP方面,避免这样的事情非常重要

$page = getPageFromUrl($_GET['url']);
include($page);

在进行用户输入和清理/过滤时要非常小心,以避免远程用户访问您网络主机上的非公共文件。