我正在检修我的一个项目,一个基于网络的预订系统,但我的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文件在传递的第二个变量中添加第二个尾部斜杠,但是我在这一点上有点困惑,理想情况下第二双眼睛会很有用!
答案 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]
确保在清除浏览器缓存后对其进行测试。