【发布时间】:2013-06-21 14:19:35
【问题描述】:
我一直在使用下一个:
RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L]
重写我的链接。我只使用了一个文件名“page.php”,它起作用了。 今天,我想添加另一个文件“project.php”,并且需要另一个 RewriteRule,这是我尝试在 .htaccess 中使用的完整代码:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/$ project.php?category=$1&id=$4&type=$2&name=$3 [L]
但是,它只适用于第一条路径,而第二条则混乱。拜托,谁能帮忙解答一下?我试图搜索它一段时间,但找不到解决方案。非常感谢!
【问题讨论】:
-
我们能得到一个网址的例子吗? page.php 的一个和 project.php 的一个。
-
感谢您的回复,乔纳森。我现在无法提供实时链接,但是当我尝试从第二个链接获取“类别”时:project.php?category=$1&id=$4&type=$2&name=$3(链接转换后)它给出我把它们放在一起,包括“id”、“type”等,用斜杠;例如一/二/三
-
是的,我明白了。我不需要实际的实时链接,我只是想知道链接大致是什么样子。我已经可以告诉你的问题是
(.*)的意思是“零个或多个任何字符”。这将包括/。因此,所有 url 都将匹配.*,从而使第一条规则始终为真。之后重写停止。您最好确定每个组(括号之间)应该是什么类型的字符(仅限数字,仅限字母,两者......等)并匹配。 -
正如 Jonathan Kuhn 所说,
(.*)读取所有字符,因此将project.php规则放在首位,并在该规则中至少使用([^/]+)代替(.*)。([^/]+)读取除/之外的一个或多个字符。 -
@JonathanKuhn 和 furas,非常感谢!我将 (.*) 更改为 ([^/]+),现在一切正常!我很高兴,所以如果你能在这里,我会拥抱你们两个:P 对不起,我想我在这里太新了,无法评价你的解决方案。如果有更好声誉的人可以代替我这样做,请这样做 - 这些人 100% 帮助了我。
标签: php .htaccess mod-rewrite hyperlink