【问题标题】:Clean URL with multiple parameters具有多个参数的干净 URL
【发布时间】: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&amp;location=$2 喜欢这样吗?它显示 500 内部服务器错误
  • 当然不正确。你想匹配 2 个子部分吗?试试^([^/]+)/([^/]+)/?$

标签: regex mod-rewrite clean-urls


【解决方案1】:

您可以将此规则用于:city/location/speciality

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(?:/([^/]+)(?:/([^/]+))?)?/?$ page.php?city=$1&location=$2&speciality=$3 [L,QSA]

这条规则将支持所有这些 URL:

example.com/delhi
example.com/delhi/noida 
example.com/delhi/noida/dentist

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2015-02-25
    • 2015-11-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多