【发布时间】:2018-11-29 06:52:05
【问题描述】:
我正在使用 .htaccess 文件来实现干净的 url,但问题是,我无法获取第二个参数。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ result-by-city.php?city=$1
RewriteRule ^\/(searedness)([0-9]+)(.*)-gu([0-9]+)\/(.*)$ ?searedness$2=$4&%{QUERY_STRING}[L]
</IfModule>
如果我像这样添加第二个参数
RewriteRule ^([a-zA-Z0-9]+)$ result-by-city.php?city=$1&location=$2
然后,页面进入 404
http://example.com/delhi/noida --> 返回 404
http://example.com/delhi/ --> 仅在以下规则下工作正常
RewriteRule ^([a-zA-Z0-9]+)$ result-by-city.php?city=$1
【问题讨论】:
-
你在最后一个模式中只有一个组,但是你用
$1和$2引用了两个,你打算在那里有什么? -
我不明白你的问题。 '一组在最后一个模式'是什么意思?抱歉,我对正则表达式知之甚少。
-
RewriteRule ^([a-zA-Z0-9]+)$ result-by-city.php?city=$1有效,因为$1指的是使用正则表达式模式中第一个带括号的构造捕获的值。你那里没有第二个(...)。 -
RewriteRule ^([a-zA-Z0-9]+)$ ^([a-zA-Z0-9]+)$ result-by-city.php?city=$1&location=$2喜欢这样吗?它显示 500 内部服务器错误 -
当然不正确。你想匹配 2 个子部分吗?试试
^([^/]+)/([^/]+)/?$
标签: regex mod-rewrite clean-urls