除非目录存在,否则.htaccess用户名url

时间:2014-09-13 14:29:17

标签: .htaccess url-rewriting vanity-url

我目前有以下代码为用户提供他们自己的用户名网址:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1

但是,/about//terms/等现有目录不再有效,因为此代码已覆盖该网址。

如果文件或目录不存在,我是否可以调整此代码以仅将URL指向配置文件?

1 个答案:

答案 0 :(得分:4)

您应该检查文件夹是否确实存在,如果是,则强制执行重定向的规则。如果这些条件不匹配,那么它将继续执行执行重定向的规则。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1

-f标志表示它作为文件存在,-d表示目录。现在,如果请求的文件实际上是文件或目录,则它将不会继续重定向规则

此外,您可以将重定向规则缩短为:

RewriteRule ^([a-zA-Z0-9_-]+)/?$ profile.php?username=$1

?之后的/表示它将匹配或不匹配该字符。由于正则表达式的其余部分没有改变,因此该规则将同时处理这两种情况。