我正在努力实现这个简单的事情......
我有一些静态页面应该像
一样
www.domain.com/profile等..
问题是如何编写重写规则以便...
会有一些固定的重写 喜欢/ home
我希望每个存在的文件都不会被重写 www.domain.com/test.php应该去 test.php的
最后如果找不到,我希望将它重定向到static.php?_....。
RewriteRule ^/home/?$ /index.php?__i18n_language=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^/]+)/?$ /static.php?__i18n_language=$1
这样可以正常但是如果我输入index.php或test.php甚至是其他重定向的mach它会让我进入static.php ... 请帮忙!
答案 0 :(得分:1)
我很长一段时间没用过这个,但是我找到的东西应该有所帮助。它是旧脚本的一部分,只有在找不到文档时,才会生成 .httaccess 文件,以便从 / usr / share / doc 重定向: 规则是“检查,如果目标网址存在,则离开”:
RewriteEngine On
RewriteBase /doc/User_Documents
### If the directory already exists, then leave
### We're just redirecting request when the directory exists but has been renamed.
RewriteCond %{REQUEST_FILENAME} User_Documents/([^/]+-[0-9][^/]*)
RewriteCond $PWD/%1 -d
RewriteRule .* - [L]
如果其中一个条件匹配,则[L]
表示离开。在旧脚本中,有数百个生成的规则(在[L]
之后)被跳过,因为其中一个条件匹配。在您的情况下,当找到目标%{REQUEST_FILENAME}
时,您将跳过其余规则。
所以,我建议,在重定向规则之前:
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
答案 1 :(得分:1)
根据您的描述,您可以使用以下规则:
# stop rewriting process if request can be mapped onto existing file
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteRule ^ - [L]
# rewrite known paths /home, /foo, /bar, etc.
RewriteRule ^/(home|foo|bar|…)$ /index.php [L]
# rewrite any other path
RewriteRule ^ /static.php [L]