Regex .HTACCESS MOD_重写平面链接问题

Regex .HTACCESS MOD_重写平面链接问题,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我在使用htaccess重新编写平面链接时遇到了一些问题,我有两套规则,它们独立地工作得非常好,但是当它们放在一起时,会产生不良影响 如果缺少正斜杠,第一节将添加一个尾随的正斜杠,并使用301重定向重新写入url 第二种方法将所有“文件夹”转换为参数,然后以特定格式传递给php 根据页面的不同,我们有未知数量的文件夹,因此希望保持代码的通用性 问题在于,尽管代码功能可以工作,即php被输入正确的参数,但url被重新写入错误的格式 Php代码: <?php echo ‘<pre>

我在使用htaccess重新编写平面链接时遇到了一些问题,我有两套规则,它们独立地工作得非常好,但是当它们放在一起时,会产生不良影响

如果缺少正斜杠,第一节将添加一个尾随的正斜杠,并使用301重定向重新写入url

第二种方法将所有“文件夹”转换为参数,然后以特定格式传递给php

根据页面的不同,我们有未知数量的文件夹,因此希望保持代码的通用性

问题在于,尽管代码功能可以工作,即php被输入正确的参数,但url被重新写入错误的格式

Php代码:

<?php echo ‘<pre>’;print_r($_GET); echo ‘</pre>’;?>
被重新写入

Array
(
    [p] => foo
    [other] => Array
        (
            [0] => bar
        )
)
输出:

localhost/foo/bar
如果删除htaccess的第一部分,则输出相同,url保持不变:

Options +FollowSymlinks
RewriteEngine on
HTACCESS:

RewriteCond %{REQUEST_URI} !.*/$
RewriteRule (.*)$ /$1/ [L,R=301] 
第1节:

RewriteRule ^(.*)/([^/]+)/?$ $1&other[]=$2 [L]
RewriteRule ^(?!index\.php)([^/]+)/?$ /index.php?p=$1 [L,QSA]
第2节:

Options +FollowSymlinks
# Activate Rewrite Engine
RewriteEngine on
# Force trailing slash to be present (only if such file does not exist)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [R=301,QSA]
# Rewrite rule to real php file (only if such folder does not exist)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9\-_]+)/([a-z0-9\-_]+)/$ /index.php?p=$1&other[]=$2 [NC,QSA,L]

请尝试以下几行:

请注意,最后一行仅适用于此结构的URL:/foo/bar/。它不适用于/foo/bar,这永远不会发生,因为我们有特殊的重定向规则来添加尾部斜杠以及较长的URL,如/foo/bar/meow/-您需要复制和修改最后2行

此外,如果有一个文件夹与URL匹配,例如foo/bar/则该规则也不起作用


这些规则经过测试并确认有效。如果您需要任何修改,请告诉我。

我不知道您想做什么以及问题出在哪里。请您澄清一下,请提供1到2个这样的URL示例:它们在浏览器中的外观,以及您希望如何将它们发送到PHP脚本重写。我知道你想要http://example.com/foo/bar => http://example.com/foo/bar/ => ??? 我试图更改将发送到PHPI的最终URL,因此如果需要,会附加一个正斜杠,并且当我打印\u r$\u GET时,我有一个类似[p]=>foo[other]=>array[0]=>bar的数组。localhost之后的第一部分成为p的值,其余部分放在另一个数组中。单独而言,原始post中的条件/规则确实有效,但是当它们一起使用时,问题就会出现。希望这能澄清
RewriteRule ^(.*)/([^/]+)/?$ $1&other[]=$2 [L]
RewriteRule ^(?!index\.php)([^/]+)/?$ /index.php?p=$1 [L,QSA]
Options +FollowSymlinks
# Activate Rewrite Engine
RewriteEngine on
# Force trailing slash to be present (only if such file does not exist)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [R=301,QSA]
# Rewrite rule to real php file (only if such folder does not exist)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9\-_]+)/([a-z0-9\-_]+)/$ /index.php?p=$1&other[]=$2 [NC,QSA,L]