【问题标题】:Converting querystring to directory view将查询字符串转换为目录视图
【发布时间】:2016-11-26 13:17:33
【问题描述】:

我正在尝试使用 htaccess mod-rewrite 来更改我使用的一些链接。我很擅长其他东西(PHP 和 MySQL),但是当谈到这个 htaccess 东西时,我的想法就离开了我。

这就是我想要的:

转换

mydomain.com/item.php?id=1

mydomain.com/item/1

如果页面变量也是这样设置的:

转换

mydomain.com/item.php?id=1&page=view
mydomain.com/item.php?id=1&page=remove

mydomain.com/item/view/1
mydomain.com/item/remove/1

但我也希望 .php 扩展名隐藏在整个网站中,而不仅仅是 item.php。像这样:

mydomain.com/item.php
mydomain.com/user.php

mydomain.com/item
mydomain.com/users

此外,如果有人访问旧的无聊链接(item.php 或 item.php?id=1),则应将其转发到更改后的版本(/item 或 /item/1)。

我这样做是为了隐藏 php 扩展:

RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,QSA,L]

并且还这样做以使用查询字符串转发 item.php:

RewriteRule ^item/([0-9]+)/?$ /item.php?id=$1

他们似乎分开工作,但没有一起工作。我只是不知道如何使它适用于所有这些不同的东西。

我也希望能够使用

$_GET['id'] and $_GET['page']

在 item.php 中正常

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    您将需要更多的规则来使所有这些一起工作:

    Options -MultiViews
    RewriteEngine On
    
    # external redirect /item.php?id=1&page=view to /item/view/1
    RewriteCond %{THE_REQUEST} \s/+item\.php\?id=([^\s&]+)&page=([^\s&]+) [NC]
    RewriteRule ^ /item/%2/%1? [R=302,L,NE]
    
    # external redirect /item.php?id=1 to /item/1
    RewriteCond %{THE_REQUEST} \s/+item\.php\?id=([^\s&]+) [NC]
    RewriteRule ^ /item/%1? [R=302,L,NE]
    
    # external redirect /user.php to /user
    RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC]
    RewriteRule ^ /%1 [R=302,L,NE]
    
    # internal rewrite /item/view/1 to /item.php?id=1&page=view
    RewriteRule ^item/([\w-]+)/(\d+)/?$ item.php?id=$2&page=$1 [L,QSA,NC]
    
    # internal rewrite /item/1 to /item.php?id=1
    RewriteRule ^item/(\d+)/?$ item.php?id=$1 [L,QSA,NC]
    
    # internal rewrite /user to /user.php
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)$ $1.php [L]
    

    参考资料:

    【讨论】:

    • 你能解释一下每一行的作用吗?我不想被勺子喂。谢谢!
    • 我添加了一些关于 mod_rewrite 的解释和很好的参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多