我目前有以下代码为用户提供他们自己的用户名 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 指向配置文件?
我目前有以下代码为用户提供他们自己的用户名 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 指向配置文件?
您应该检查文件夹是否确实存在,如果存在,则强制执行不重定向的规则。如果这些条件不匹配,那么它将继续执行重定向的规则。
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
?
后面的表示/
它将匹配或不匹配该字符。由于正则表达式的其余部分未更改,因此该规则将同时处理这两种情况。