.htaccess 冲突URL重写

.htaccess 冲突URL重写,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我的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结构的情况下,如何修复它以理解要正确解释和

我的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。请告诉我这里需要一些帮助。

如果url之间没有固定的差异,您就不能在这两个页面之间不断分割请求。我建议更改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
,包含如下代码。显然,我不知道这两者之间有什么区别。也许你可以把它和数据库或其他东西匹配起来


如果url之间没有固定的差异,则无法在这两个页面之间持续拆分请求。我建议更改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
,包含如下代码。显然,我不知道这两者之间有什么区别。也许你可以把它和数据库或其他东西匹配起来


在您询问的一条评论中:

如果我要让URL变成http://domain.com/some-file-name 对于
“view.php”和http://domain.com/some-file-name---[id]用于
“display.php”其中“[id]”将是
数据库,它是否会改变他们的URL并导致
重写得好吗?

是,根据以下规则,这是可能的:

# 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]

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

如果我要让URL变成http://domain.com/some-file-name 对于
“view.php”和http://domain.com/some-file-name---[id]用于
“display.php”其中“[id]”将是
数据库,它是否会改变他们的URL并导致
重写得好吗?

是,根据以下规则,这是可能的:

# 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]


如果两者之间没有恒定的差异,则无法单独使用
.htaccess
来实现。您可以使用路由器php页面,但这将是一个明智的选择。@Sumurai8路由器页面是如何工作的?你能给我一个样品并进一步解释一下吗?你想做什么?现在,两行都在用相同的标准重写(所有字母数字文本)。如果你想让他们重写不同的URL,你需要在你的重写规则中使你的正则表达式更加具体,或者添加一个重写条件,例如,重写规则^view/([a-Za-z0-9-]+)$/j/view.php?cat=$1我也不明白你在这里想做什么。URL可以重写为一个或另一个内容。无法同时将一个URL重写为两个不同的URL。如果它们用于不同的页面,则需要设置不同的规则,而不是一揽子
^([A-Za-z0-9-]+)$
。没办法。是什么把URL区分开来的,你能举一些例子吗?如果两者之间没有固定的区别,你就不能单独用
.htaccess
来区分。您可以使用路由器php页面,但这将是一个明智的选择。@Sumurai8路由器页面是如何工作的?你能给我一个样品并进一步解释一下吗?你想做什么?现在,两行都在用相同的标准重写(所有字母数字文本)。如果你想让他们重写不同的URL,你需要在你的重写规则中使你的正则表达式更加具体,或者添加一个重写条件,例如,重写规则^view/([a-Za-z0-9-]+)$/j/view.php?cat=$1我也不明白你在这里想做什么。URL可以重写为一个或另一个内容。无法同时将一个URL重写为两个不同的URL。如果它们用于不同的页面,则需要设置不同的规则,而不是一揽子
^([A-Za-z0-9-]+)$
。没办法。你能举一些例子吗?请给我一个我应该在这里检查的条件的例子。页面也从数据库中调用
view.php
在我的程序中获取“所有创建的组”,而
display.php
显示关于每个组的特定信息。很抱歉,您必须自己完成。我不能神奇地了解你的整个后台,老实说,你应该能够自己创造这种条件……如果我知道这种条件,那么我应该能够。我已经尝试了GET请求,它应该从DB中获取页面,但是我得到了一个完全没有错误的白色页面。这是我问的,因为它让我完全迷失了方向,因为我没有显示任何错误来知道从哪里获取方向。检查服务器上的错误日志(浏览器中的错误通知可能出于安全原因而关闭?)
var_dump
您对各种url的条件,以查看它何时为真,何时为假。我的日志中没有错误,并且我的var_dump为空。如果我让URL变成
http://domain.com/some-file-name
用于“view.php”和
http://domain.com/some-file-name---[id]
对于“display.php”,其中“[id]”将是数据库中的“组id”编号,这会使他们的URL有所不同,并导致它重写好吗?请给我一个什么样的条件下,我应该检查这里的样本。页面也从数据库中调用
view.php
在我的程序中获取“所有创建的组”,而
display.php
显示关于