【问题标题】:.htaccess Rewrite rule multiple pages.htaccess 重写规则多页
【发布时间】:2021-02-09 05:37:44
【问题描述】:

已经尝试解决这个问题几个小时了,但没有做好。

我有一个网站www.example.com/user.php?username=john 我使用.htaccess 让它看起来很像www.example.com/user/john 我使用以下.htaccess Rewrite 规则并且它有效

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*/([a-zA-Z0-9_-]+)|([a-zA-Z0-9_-]+))$ ./user.php?username=$1 [L]

问题

我有一个个人资料页面,例如www.example.com/profile.php?username=john 我还使用以下.htaccess 使其看起来像www.example.com/profile/john

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*/([a-zA-Z0-9_-]+)|([a-zA-Z0-9_-]+))$ ./profile.php?username=$1 [L]

现在,这根本不起作用,但是当我删除第一个重写规则(规则 user.php)并将其放在第二个重写规则(规则 profile.php)之后,我的个人资料页面可以工作,反之亦然,

所以基本上我首先放置的规则决定了我可以使用我的 URL 访问哪个页面。

我需要它同时适用于两个页面。我同意你在.htaccess rewrite 上并不接近初学者水平。

提前致谢。

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting friendly-url


    【解决方案1】:

    您也可以尝试以下方法,首先检查传入请求是否既不是文件也不是目录,然后检查匹配模式。

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^user/([\w-]+)/?$ /user.php?username=$1 [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^profile/([\w-]+)/?$ /profile.php?username=$1 [NC,L]
    

    【讨论】:

      【解决方案2】:

      请您尝试以下操作。由于 URL 具有其唯一性,因此最好检查其 %{REQUEST_URI} 值中的条件,我正在检查 REQUEST_URI 是否从 user 开始,然后选择 1 条规则,如果它以 profile 开头,则选择另一个规则,所以没有混乱(我相信你为此尝试了很好的荣誉,但由于条件之间没有隔离,因此它令人困惑的引擎恕我直言)。

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_URI} ^/user/([\w-]+)/?$
      RewriteRule ^.*$ /user.php?username=%1 [NC,L]
      
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_URI} ^/profile/([\w-]+)/?$
      RewriteRule ^.*$ /profile.php?username=%1 [NC,L]
      

      【讨论】:

        猜你喜欢
        • 2015-02-15
        • 2017-11-21
        • 2011-02-04
        • 2013-06-29
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        相关资源
        最近更新 更多