Php 检测apache URL中的单斜杠

Php 检测apache URL中的单斜杠,php,apache,url-rewriting,Php,Apache,Url Rewriting,我在检测URL中的单斜杠时遇到问题,我想要的URL是 通过这个重写规则,我可以捕获用户名,但它也适用于前导斜杠,这是不需要的 RewriteRule ([A-Za-z0-9]+){0,1}$ index.php?c=profile&val=$1 [NC,L] ^起始符号不返回任何内容,因此我已将其删除,现在我正在本地主机上测试它,因此我的测试url为 http://localhost/projectname/username 在其服务器上 http://sitename.com/u

我在检测URL中的单斜杠时遇到问题,我想要的URL是

通过这个重写规则,我可以捕获用户名,但它也适用于前导斜杠,这是不需要的

RewriteRule ([A-Za-z0-9]+){0,1}$ index.php?c=profile&val=$1 [NC,L]
^
起始符号不返回任何内容,因此我已将其删除,现在我正在本地主机上测试它,因此我的测试url为

http://localhost/projectname/username
在其服务器上

http://sitename.com/username
这是我完整的.htaccess

RewriteEngine On
RewriteBase /projectname/

RewriteCond $1 !^(maintainance\.php|index\.php|files|images|robots\.txt|css|js)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [PT,L]

RewriteRule ^([A-Za-z0-9]+){0,1}$ index.php?c=profile&val=$1 [NC,L]
谁能告诉我如何通过重写规则捕获单斜杠用户名

任何帮助都将不胜感激


谢谢

请尝试使用以下htaccess脚本。在
val
中可以获取url值。通过
/
分解可以获取用户名

RewriteEngine On
RewriteBase /projectname/
RewriteRule ^([A-Za-z0-9]+){0,1}$ index.php?c=profile&val=%{REQUEST_URI} [L,NC,QSA]

只是一句话,因为您似乎没有完全理解正则表达式是如何工作的:您写道:“
^
起始符号不返回任何内容,所以我将其删除”。。。这个角色不是为了“返回任何东西”。它将模式锚定到输入字符串的开头,以确保没有垃圾。如果没有该字符,您的模式是盲目的,只会忽略前导垃圾,很可能不是您想要的。@arkascha谢谢,我理解^表示起始符号,我试图将其限制为单斜杠,因此任何从开始到结束验证我的RE的内容都应纳入此规则OK,然后您应该重新阅读.htaccess样式url重写的文档。您尝试计算的输入字符串中永远不会有前导斜杠。只有在中央http服务器配置中使用重写时才能执行此操作,这实际上是优于.htaccess样式文件的首选方式。哦,我想重复此警告:没有前导的模式当前将是盲(忽略)垃圾前导字符。这不是你想要的。@arkascha好的,我已经放了起始符号,^([A-Za-z0-9/]+){0,1}$&^/([A-Za-z0-9]+)$这些对/username之类的东西都是有效的RE,但它在重写URLAI中也不起作用,谢谢Kalai,但我在它下面有更多的规则,所以如果它得到单斜杠URL,我希望规则它停止在下面运行,这可能吗?我想要的是,如果它的单斜杠在这个规则下,它将与[NC,L]标记断开,否则它将使其余的重写规则有效它们都是双斜杠验证器,这里它们是RewriteRule page/new_page/(.*)/(.*)$index.php?c=page&m=new_page&title=$1&pageno=$2 RewriteRule page1/new_page1/(.*)).html$index.php?c=page1&m=new_page1&title=$1