我正在尝试将网址从example.net/customname
或example.net/customname/
重定向到example.net/my/home.php?username=customname。这本身并不复杂:
RewriteRule ^([a-zA-Z0-9_-]+)$ my/home.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ my/home.php?username=$1
但是,我想要排除现有的目录和文件,例如example.net/about/
和example.net/files
。我无法弄清楚如何使用RewriteCond(我需要多次重写conds?)以排除example.net/about/
之类的项目被重写为example.net/home.php?username=about
。我怎么能这样做?
谢谢!
编辑:这是确切的解决方案......
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?url=$1 [NC,L]
答案 0 :(得分:4)
RewriteCond
有一些特殊的模式用于此目的。试试这个:
RewriteCond %REQUEST_FILENAME ! -d
RewriteCond %REQUEST_FILENAME ! -f
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?username=$1
答案 1 :(得分:2)
您可以使用RewriteCond(重写条件),类似于:
RewriteCond %{REQUEST_URI} ! ^\/(about|files)\/?$
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?username=$1 [L]
如果它通过上面的所有条件,这实际上只会应用规则,类似于使用if语句。
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond