1

我的 htaccess 文件中有以下内容

RewriteRule ^([A-Za-z0-9-]+)$ /j/view.php?cat=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)$ /j/display.php?name=$1 [L]

两者都重写以获取 URL 为http://domain.com/some-file-name. 以这种方式,当点击链接时,浏览器会解释哪个重写规则首先出现在行中,因为 URL 具有相同的格式。

如何修复它以了解要正确解释和显示的 URL 仍保持相同的 URL 结构。

目前,如果我移动上面的#2,它会开始解释#2,如果我允许,它会解释#1。请我在这里需要一些帮助。

4

2 回答 2

1

在您的一条评论中,您问:

If I were to make URL become http://domain.com/some-file-name for "view.php" and http://domain.com/some-file-name---[id] for "display.php" where "[id]" will be the "group_id" number in the database, will it make a difference in their URL and cause it to rewrite well?

是的,这可以通过以下规则实现:

# first try to see if belongs to /j/view.php based on URI pattern
RewriteRule ^([a-z0-9-]+)---([0-9]+)/?$ /j/view.php?cat=$1&id=$2 [L,NC,QSA]

# No try /j/display.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9-]+)/?$ /j/display.php?name=$1 [L,NC,QSA]
于 2013-10-01T09:20:23.623 回答
0

如果 url 之间没有恒定的差异,则您不能不断地在这两个页面之间拆分请求。我建议更改网址,以便两个页面中的每一个都有自己的前缀。

RewriteRule ^c-([A-Za-z0-9-]+)$ /j/view.php?cat=$1 [L]
RewriteRule ^n-([A-Za-z0-9-]+)$ /j/display.php?name=$1 [L]

如果您不想这样做,则必须创建一个路由器页面,该页面可以智能地在两个页面之间拆分请求。你会有一个规则:

RewriteRule ^([A-Za-z0-9-]+)$ /j/router.php?page=$1 [L]

还有一个router.php类似以下代码的文件。显然,我无法说出两者之间有什么区别。也许你可以将它与数据库或其他东西相匹配。

<?php
if( condition to check $_GET['page'] for view.php ) {
  $_GET['cat'] = $_GET['page'];
  include( '/j/view.php' );
} else {
  $_GET['name'] = $_GET['page'];
  include( '/j/display.php' );
}
于 2013-10-01T04:13:02.663 回答