Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex ApacheModrewrite.htaccess-类似链接_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex ApacheModrewrite.htaccess-类似链接

Regex ApacheModrewrite.htaccess-类似链接,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我想知道是否有可能实现以下目标: 有时第二个属性将显示在子菜单中 RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 有时它会是位置 RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 但通常情况下,这种方式不起作用。有什么可能的方法来实现这一点吗 编辑: 当前完全重写规则: RewriteEngine

我想知道是否有可能实现以下目标:

有时第二个属性将显示在子菜单中

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA]
有时它会是位置

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA]
但通常情况下,这种方式不起作用。有什么可能的方法来实现这一点吗

编辑: 当前完全重写规则:

RewriteEngine on
ErrorDocument 404 /error

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]


RewriteRule ^([\w-]+)/?$ index.php?menu=$1 [L,QSA]

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA]

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA]

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA]

为了进一步阐述我的意见,您可以制定如下规则:

ErrorDocument 404 /error
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^([\w-]+)/?$ index.php?menu=$1 [L,QSA]

RewriteRule ^([\w-]+)/n-([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA]

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA]

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA]

现在,您的新闻链接应该是这样的:
http://domain.com/main-menu/n-sports

考虑您的正则表达式开始匹配
\w
,它代表“单词字符”,通常是
[A-Za-z0-9.]
。请注意包含下划线和数字。例如,这也意味着这与重音字符不匹配。请确保这与URL中每个路径开头的前导斜杠不匹配

您应该通过添加前导斜杠来更改重写:

RewriteRule ^/([\w-]+)/?$ index.php?menu=$1 [L,QSA]

RewriteRule ^/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA]

# RewriteRule ^/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA]

RewriteRule ^/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA]

我还评论了第三条规则,因为正则表达式与第二条规则相同。您的方法还有一个逻辑问题,因为这些行之间没有区别,所以无法调用
index.php?menu=$1&submenu=$2

您应该发布完整的重写规则列表。例如,有一个RewriteBase指令可能会改变整个行为。当然,它不会以这种方式工作。您需要将
news
链接的前缀设置为:
/main/n-top
=>
/index.php?menu=main&news=top
您能更准确一点吗?这似乎正在工作。谢谢虽然我并不完全理解这个,但这个“n-”的作用是:)不客气
n-
在您的新闻链接中作为前缀存在,这样您就不会有完全相同的匹配模式。