【问题标题】:.htaccess mod_rewrite parameter to non existing subdir.htaccess mod_rewrite 参数到不存在的子目录
【发布时间】:2014-08-19 21:38:12
【问题描述】:

我想扩展我现有的重​​写规则,将特殊的 url 参数重写为不存在的子目录。

类似这样的:

真正的网址是:

host.com/post.php?id=17&lang=pl

我现有的重​​写:

host.com/somedescriptionstring-p-17.html?lang=pl

这个重写实现了这一点:

RewriteRule ^(.*)-p-(.*).html$ post.php?id=$2&%{QUERY_STRING}

现在,我想将重写扩展到:

host.com/pl/somedescriptionstring-p-17.html

这个,我想用两个特殊的语言参数:“pl”和“ru”——默认参数必须是“pl”

有人可以帮帮我吗?

谢谢你和最好的问候。

【问题讨论】:

    标签: .htaccess mod-rewrite subdirectory


    【解决方案1】:

    我假设您将拥有两种类型的网址。其中一个是http://example.com/lang/post1234.html 的形式,一个是http://example.com/post1234.html 的形式。第二个没有语言,您希望将其默认为波兰语。为此,您需要两条规则。第一个将在内部将带有语言代码的那个重写为真实的 url。另一个将发出外部重定向以将“pl”添加到 url。

    #This translates the fancy url internally
    RewriteRule ^(pl|ru)/.*-p-([0-9]+)\.html$ /post.php?lang=$1&id=$2 [L]
    
    #When there is a language parameter
    RewriteCond %{QUERY_STRING} lang=(pl|ru)
    RewriteRule ^(.*)-p-([0-9]+)\.html$ /%1/$1-p-$2.html [R,L]
    
    #default case
    RewriteRule ^(.*)-p-([0-9]+)\.html$ /pl/$1-p-$2.html [R,L]
    

    测试后将R更改为R=301可以正常工作。

    【讨论】:

    • 这看起来不错。至少我没有得到 404 :-) 我原来的重写看起来像这样: RewriteRule ^(.*)-p-(.*).html$ post.php?id=$2&%{QUERY_STRING} 如何实现你的建议在这里?谢谢你!
    • cmets 中的代码不可读,乍一看该代码与问题中的任何 url 都不匹配。我不确定你想要的重写是什么。
    • 我想扩展我的 RewriteRule(代码 3)以使代码 2 的 Url 看起来像代码 4 的 Url
    • 不知何故我没有完成它...请您发布我必须在代码 3 中替换我的规则的代码行吗?非常感谢
    • 我删除了一些我的 cmets,因为它变成了讨论。自从您完全更改了问题中的网址后,我已经稍微编辑了我的答案。如果您仍然无法使用它,则需要获得更多声誉,以便我们可以在聊天中讨论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多