Apache URL缩短器-.htaccess更新

Apache URL缩短器-.htaccess更新,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,不久前,我制作了一个小的URL缩短器,它基本上只是将用户重定向到“长URL” 这样做的脚本被巧妙地命名为shorter.php 所以,我的问题是: 当我第一次制作缩写器时,我制作了一个.htaccess文件,如下所示: RewriteRule ^s/(.*)$ shorter.php?u=$1 [NC,L] 这使我能够将:doma.in/s/VAR重写为doma.in/shorter.php?u=VAR,从而重定向到链接到VAR的页面 上周,我意识到我也可以将我的URL缩短为这样:dome.i

不久前,我制作了一个小的URL缩短器,它基本上只是将用户重定向到“长URL”

这样做的脚本被巧妙地命名为shorter.php

所以,我的问题是:

当我第一次制作缩写器时,我制作了一个.htaccess文件,如下所示:

RewriteRule ^s/(.*)$ shorter.php?u=$1 [NC,L]
这使我能够将:doma.in/s/VAR重写为doma.in/shorter.php?u=VAR,从而重定向到链接到VAR的页面

上周,我意识到我也可以将我的URL缩短为这样:dome.in/VAR

据我所知,这也可以在.htaccess中完成

当我仍然必须支持介于“doma.in”和“VAR”之间的带有“s/”的URL时,问题就出现了


感谢您的帮助,谢谢:)。

使用以下选项使
^s/
成为可选选项:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:s/)?(.+)$ shorter.php?u=$1 [NC,L,QSA]

添加了2个
RewriteCond
,以确保不重写现有文件和目录。

谢谢,这很有效。你能解释一下原因吗?我不懂“?:s/”部分。括号后面的“?”我明白了。此外,QSA做什么?
QSA
(查询字符串附加)标志在添加新查询参数时保留现有查询参数。而
(?:…)
是非捕获组,因此下一组仍然是
$1
而不是
$2
。是关于
mod_rewrite
Haha的好文档,是的,我知道;-)它说我必须等。。现在将其标记为已接受!