Php mod_重写和尾部斜杠

Php mod_重写和尾部斜杠,php,regex,.htaccess,mod-rewrite,Php,Regex,.htaccess,Mod Rewrite,我有 要将类似于domain.com/sample\u text的点击翻译成page.php?text=sample\u text 但是,我希望以下两个条件也起作用(并给出相同的结果) 1) 如果他们转到domain.com/sample\u text/,我希望在地址栏中保留尾随的斜杠,并显示page.php?text=sample\u text(现在它转到右侧页面,但css和js路径混乱) 2) 如果他们进入domain.com/sample\u text/worthlesdata123我想去

我有

要将类似于
domain.com/sample\u text
的点击翻译成
page.php?text=sample\u text

但是,我希望以下两个条件也起作用(并给出相同的结果)

1) 如果他们转到
domain.com/sample\u text/
,我希望在地址栏中保留尾随的斜杠,并显示
page.php?text=sample\u text
(现在它转到右侧页面,但css和js路径混乱)

2) 如果他们进入
domain.com/sample\u text/worthlesdata123
我想去掉/,在地址栏中保留
domain.com/sample\u text/
,并显示
page.php?text=sample\u text


我一直在挣扎,但我的正则表达式很差,我的大脑也不能正常工作。

你的规则应该足以满足第一个条件。如果有人访问
domain.com/sample\u text/
,则URI
sample\u text/
匹配,并应在
/page.php?text=sample\u text
处获得内容,而浏览器的URL地址栏保持不变

对于第二个条件,您需要添加一个规则来处理:

RewriteRule    ^([A-Za-z0-9-_≈]+)/?$    page.php?text=$1
这将重定向:
domain.com/sample\u text/worthlesdata123
domain.com/sample\u text/
,然后第一条规则应该从那里开始


误读了你的第一期。由于额外的斜杠,页面内容中的相对/绝对路径得到了不同的基准。当您有类似于
的内容时,相对基数来自浏览器看到的URL(而不是服务器内部重写的内容)。因此,如果浏览器看到:
http://domain.com/sample_text
,URI基是
/
,但当浏览器看到
http://domain.com/sample_text/
,URI基变为
/sample\u text/
,我猜这不是glike
images/blah.gif
所在的位置

您可以通过在页眉中包含基来解决此问题:

RewriteRule ^([A-Za-z0-9-_≈]+)/.+$ /$1/ [L,R=301]

您拥有的规则应该足以满足第一个条件。如果有人访问
domain.com/sample\u text/
,则URI
sample\u text/
匹配,并应在
/page.php?text=sample\u text
处获得内容,而浏览器的URL地址栏保持不变

对于第二个条件,您需要添加一个规则来处理:

RewriteRule    ^([A-Za-z0-9-_≈]+)/?$    page.php?text=$1
这将重定向:
domain.com/sample\u text/worthlesdata123
domain.com/sample\u text/
,然后第一条规则应该从那里开始


误读了你的第一期。由于额外的斜杠,页面内容中的相对/绝对路径得到了不同的基准。当您有类似于
的内容时,相对基数来自浏览器看到的URL(而不是服务器内部重写的内容)。因此,如果浏览器看到:
http://domain.com/sample_text
,URI基是
/
,但当浏览器看到
http://domain.com/sample_text/
,URI基变为
/sample\u text/
,我猜这不是glike
images/blah.gif
所在的位置

您可以通过在页眉中包含基来解决此问题:

RewriteRule ^([A-Za-z0-9-_≈]+)/.+$ /$1/ [L,R=301]

您需要通过使用资产(js、图像等)的绝对路径来解决的第一个问题


对于第二个问题,您需要@Jon Lin的解决方案。

第一个问题需要通过使用资产(js、图像等)的绝对路径来解决

对于第二个问题,您需要@Jon Lin的解决方案