【问题标题】:.htaccess username url unless directory exists.htaccess 用户名 url 除非目录存在
【发布时间】:2014-09-13 14:29:16
【问题描述】:

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

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

但是,任何现有目录(例如 /about//terms/)都不再有效,因为此代码已覆盖 URL。

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

【问题讨论】:

标签: .htaccess url-rewriting vanity-url


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 2020-05-11
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多