我用PHP开发了自己的CMS,现在我想让它成为SEO友好的,但我遇到了一些问题。
网站的大部分页面都可以通过ID访问,例如:
www.example.com/?id=alphanumericId123
www.example.com/?id=main
依此类推,我想重写这些网页的网址:
www.example.com/aplhanumericId/
www.example.com/main/
我已经写过这个重写规则,它运行正常:
RewriteEngine On
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA]
但它不适用于静态文件或脚本可访问的那些页面 有没有办法做一些例外?像:
if the requested file exsist {
if it is protected {
display error 403
} else {
display file
} } else {
rewrite rule
}
答案 0 :(得分:1)
您不应该重写现有文件和目录的路径:
RewriteEngine On
# Exclude existing files
RewriteCond %{REQUEST_FILENAME} !-f
# Exclude existing directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA]
另请注意,您的规则不允许使用字母数字ID,因为您要排除数字。
替代方案是:
...
# No forward slash
RewriteRule ^([^\/]+)/?$ index.php?id=$1 [QSA]
或
...
# Only a selection of characters including - and _
RewriteRule ^([-\w]+)/?$ index.php?id=$1 [QSA]
答案 1 :(得分:0)
在RewriteRule之前使用以下内容
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
基本上它检查它不是文件,而不是目录。