所以我有一个网站,我试图实现像Twitter这样的网址。这是我的代码
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1
这个问题是我有/signup
和/forgot
这样的网页,当我转到它们时,它们会被用作用户。所以我所做的就是把每一页我都不希望htaccess在signup
这样的文件夹中提取,并且包含index.php
用于注册页面。但是htaccess仍将其视为用户名。所以我的问题是如何解决这个问题?我想"阻止"某些链接(文件夹)不被计为用户。
我知道
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
适用于文件,但文件夹有吗?
答案 0 :(得分:1)
!-f
已经做了你想要的。问题是您有两个规则条件适用于单个规则。
因此,第二条规则即使对于存在的文件夹也会被应用。
这将规则合并为一条规则。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w-]+)/?$ profile.php?username=$1
!-f
或!-d
条件将失败,并且该规则将不适用。像signup
这样的现有文件夹不会被重写。/?
使/
成为可选项,并结合两种情况。\w
可以匹配字母,数字和下划线答案 1 :(得分:0)
试试这个
RewriteRule ^(signup|forgot)($|/) - [L]