现有网站中的简单mod_rewrite

时间:2011-10-22 16:48:06

标签: php apache .htaccess mod-rewrite

我正在建立一个网站(针对葡萄牙语国家),一次显示一个短语。

我想让网站更简单的非动态地址变得更友好,更容易记住用户。所以我的问题是这个,并提前感谢所有可能的帮助:

nfrases.com/ -> completely random phrase (don't need changing this!)
nfrases.com/index.php?id_frase=2222 -> phrase with ID (wanted this to be nfrases.com/2222)
nfrases.com/tag.php?tag_nome=amor -> random phrase with tag_nome (want: nfrases.com/amor)
nfrases.com/tag.php?tag_nome=amor&id_frase=2222 -> specific phrase with tag=amor (want: nfrases.com/amor/2222)

我认为这是关于mod_rewrite的noob问题,但这正是我的意思! :D已经用我掌握的一些知识进行了几次尝试,但要么我得到了404页,要么参数不会被$ _GET ['tag_nome']或$ _GET ['id_frase']接收。

我拥有的实际htaccess是这样但它不起作用:

Options +FollowSymlinks -MultiViews

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.nfrases.com$
RewriteRule ^(.*)$ http://www.nfrases.com/$1 [R=301]

RewriteRule ^([0-9]+)(.*) index.php?id_frase=$1
RewriteRule ^(.*)/([0-9]+) tag.php?tag_nome=$1&id_frase=$2 [L,QSA]

你们能帮助我吗?

再次感谢您的一切!感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

以下重写规则适用于RewriteRule tester

#removes trailing slash
#/vida/222/ becomes /vida/222
#/222/ becomes /222
RewriteRule ^(.+)/$ /$1 [R=301]

#/222 silently rewrites to /index.php?id_frase=222
RewriteRule ^([0-9]+)$ index.php?id_frase=$1 [L]

#/vida silently rewrites to /index.php?tag_nome=vida
RewriteRule ^([a-zA-Z-]+)$ index.php?tag_nome=$1 [L]

#/vida/222 silently rewrites to /index.php?tag_nome-vida&id_frase=222
RewriteRule ^([^/]+)/([0-9]+)$ tag.php?tag_nome=$1&id_frase=$2 [L]

答案 1 :(得分:1)

你可能想要这样的东西:

<IfModule mod_rewrite.c>
RewriteEngine on

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

RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

在这种情况下,nfrases.com / 2222将重新命名为index.php / 2222。这很容易在index.php文件中允许基本路由。对于更高级的路由,使用好的框架可能更快更容易。看看FuelPHP(http:www.fuelphp.com)或CodeIgniter(http://www.codeigniter.com)。