mod_rewrite:带有两个GET变量的URL上的斜杠

时间:2015-10-23 09:37:48

标签: php apache .htaccess url mod-rewrite

我正在检修我的一个项目,一个基于网络的预订系统,但我的htaccess文件有点问题。旧的系统是相当标准的,在网站的路线上有.php脚本,我有一个隐藏我的扩展的规则,结果我有一个像/ viewinvoce?ID = 1的URL。我一直试图找出如何重写这个URL所以它看起来更整洁 - 格式/ viewinvoice / 1,我到了那里,但我有一个小问题......

URL /测试有效 - 它会添加一个斜杠,生成URL / test /,并将值'test'传递给网页。

URL / test /如上所述,由于已经存在,因此不会添加尾部斜杠,并且会将“test”传递给网页。

URL / test / 1也有效,'test'和'1'都传递到网页,

但是当斜杠的类型在1之后(/ test / 1 /)时,页面会抛出404.

我的.htaccess文件

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /index.php?PID=$1&ID=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])/(.*[^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]

我简单的PHP脚本..

<?php
    echo $_GET['PID'];
    echo '<br>';
    echo $_GET['ID'];

理想情况下,我希望.htaccess文件在传递的第二个变量中添加第二个尾部斜杠,但是我在这一点上有点困惑,理想情况下第二双眼睛会很有用!

1 个答案:

答案 0 :(得分:1)

请尝试以下规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?PID=$1&ID=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ index.php?PID=$1 [L,QSA]

确保在清除浏览器缓存后对其进行测试。