帮助动态URL的mod_rewrite规则

时间:2009-05-25 20:35:02

标签: apache mod-rewrite dynamic-url

呃.. mod_rewrite让我感到愚蠢。我还没有把我的大脑包裹起来。 :/

我有这个网址:

http://example.com/a/name/

......我想在此指出:

http://example.com/a/index.php?id=name

...其中name是作为index.php参数传递给id的内容。

我尝试的任何东西都会产生404或500 .. :(

4 个答案:

答案 0 :(得分:2)

如果希望尾部斜杠是可选的,则必须排除要重写请求的文件。否则你将有一个很好的无限递归。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/a/index\.php$
RewriteRule ^/a/([^/]+)/?$ /a/index.php?id=$1 [L]

此处以/a/…开头但不/a/index.php的任何请求都会重写为/a/index.php

但如果必须使用尾部斜杠,则无需排除目标文件:

RewriteEngine on
RewriteRule ^/a/([^/]+)/$ /a/index.php?id=$1 [L]

答案 1 :(得分:1)

让你开始:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^/?a/([^/]+)/?$ /a/index.php?id=$1 [QSA,L]

如果一个重写教程不适合您,try another

修改:根据Gumbo的建议排除index.php

答案 2 :(得分:1)

也许是

的内容

RewriteEngine on
RewriteBase /a/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?id=$1 [L,QSA]

会做到这一点。

答案 3 :(得分:1)

我建议你看一下这个网址:

http://www.dracos.co.uk/code/apache-rewrite-problem/

提供的解决方案可行,但URL中有一些注意事项,主要是关于?和#在URL本身。