【问题标题】:htaccess rewrite query string not working as expectedhtaccess 重写查询字符串未按预期工作
【发布时间】:2018-10-14 07:48:06
【问题描述】:

我的 htaccess 中有以下内容

RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)id=3($|&)
RewriteRule ^user/members/profile\.php$ /user/members/profile/id/3?&%{QUERY_STRING}

RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

我希望重写规则做两件事:

  • 删除.php
  • 将 user/members/profile.php?id=3 更改为 user/members/profile/id/3

查询字符串被重定向到 user/members/profile/id/id=3?id=3

救命!

【问题讨论】:

标签: apache .htaccess mod-rewrite


【解决方案1】:

所以你应该用正则表达式匹配模式,像这样:

RewriteEngine on    
RewriteRule    ^user/members/profile/id/([0-9]+)/?$    user/members/profile.php?id=$1    [NC,L]

应该将user/members/profile.php?id=3 重定向到user/members/profile/id/3

就像我之前提到的,你可以找到详细的解释here。 虽然添加单独的规则会很乏味,但可能有助于使用已经具有更好 URL(如 Laravel 或 Symfony)的 PHP 框架。

【讨论】:

  • 这条规则不会改变任何东西。好像正则表达式不匹配
  • 您是否尝试点击该网址? user/members/profile/id/3
  • 您是否也删除了帖子中的条件?试试我的两条线
  • 刚刚编辑了我的答案,请尝试这两行,然后尝试点击user/members/profile/id/3
  • 是的,我只有你发布的两行。当我转到 user/members/profile/id/3 时,我得到一个 404
【解决方案2】:

试试下面,

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/members/profile/id/([0-9]+)/?$ user/members/profile.php?id=$1 [NC,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2015-03-15
    • 2015-04-03
    相关资源
    最近更新 更多