繁体   English   中英

使用.htaccess清理GET URL

[英]Using .htaccess to clean GET URL

在任何人发表评论之前,我都知道有很多关于该主题的文章,但是似乎都没有一个问题解决了我的问题,这就是为什么我开始了这个话题。

因此,我在网站上有一个名为project.php的页面,该页面用于GET查询,如下所示: project.php?id=12我想要一个.htaccess文件,它将给定的URL转换为localhost/MyWeb/project/id/12/ 我从字面上关注与该主题相关的每篇文章,但似乎都没有。

此外, .php ,我希望所有的.php.html文件仅显示其名称,即localhost/MyWeb/index.php/变为localhost/MyWeb/index/localhost/MyWeb/sub1/sub2.php成为localhost/MyWeb/sub1/sub2/

编辑:

我之所以没有添加我的作品,是因为我认为这不会有任何帮助。 但是这里是:

RewriteEngine On

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

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

首先,您要在子目录( MyWeb )之外进行操作,这意味着您需要设置RewriteBase 另外,您需要确保将.htaccess文件放在该子目录中,而不是在localhost文档根目录中。

因此,在RewriteEngine on下面,插入以下代码行:

RewriteBase /MyWeb/

接下来,您声明要将project.php?id={id}转换为project/id/{id} ,但是您的代码省略了/id/段。 我还注意到您有两个规则,而第二个规则与您的问题矛盾,因此,我仅向您展示您需要对第一个规则进行的更改,直到您弄清楚第二个规则的用途为止。

要使项目URI有效,请将第一个规则更改为:

RewriteRule ^project/id/([0-9]+)/?$ project.php?id=$1 [QSA,L]

这将与所需的URI匹配,并带有可选的尾部斜杠。 我还添加了QSA标志,该标志将所有额外的查询字符串参数附加到重新生成的URI上,以及L标志,如果匹配规则,该标志将停止处理。

接下来,要从您的URI中省略.php.html ,请将最后三行更改为以下内容:

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

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

当您向localhost/MyWeb/index发出请求时,Apache将检查是否存在localhost/MyWeb/index.phplocalhost/MyWeb/index.html ,然后将首先为其提供服务。

如果同时拥有PHP和HTML文件,则将提供PHP,而不是HTML。 如果您希望提供HTML文件,则交换两个块。

不幸的是,我不知道对这些强制使用斜杠的好方法,特别是因为要检查它们是否存在。 换句话说,如果您用subins斜杠请求sub2/ ,则它将不起作用,因为它将需要检查sub2/.php存在,而实际上不存在。

更新:为了获得更多好处,请将这两个块RewriteBase您之前设置的新RewriteBase下面,以将旧URI重定向到新URI,同时允许对新URI的重写仍然有效:

RewriteCond %{THE_REQUEST} \/project\.php\?id=([0-9]+) [NC]
RewriteRule ^ project/id/%1/ [R=302,L,QSD]

RewriteCond %{THE_REQUEST} \/MyWeb/(.+)\.(php|html)
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %1 [R=302,L]

供参考,以下是完整的文件: http : //hastebin.com/gacapesoqe.rb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM