繁体   English   中英

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

[英]mod_rewrite: Trailing slash on URL with two GET variables

我正在大修我的一个项目,一个基于网络的预订系统,但我的 htaccess 文件有点问题。 旧系统非常标准,网站路径中有 .php 脚本,我有一个隐藏扩展的规则,结果我有一个像 /viewinvoce?ID=1 这样的 URL。 我一直在尝试找出如何重写此 URL 以使其看起来更整洁 - 格式为 /viewinvoice/1,并且我正在到达那里,但我有一个小问题......

URL /test 有效 - 它添加一个尾部斜杠使 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 文件为传递的第二个变量添加第二个斜杠,但此时我有点困惑,理想情况下,第二双眼睛会很有用!

试试这些规则:

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]

请务必在清除浏览器缓存后对其进行测试。

暂无
暂无

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

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