htaccess和CMS的URL问题

时间:2016-09-13 12:09:23

标签: php .htaccess mod-rewrite

我用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
}

2 个答案:

答案 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

基本上它检查它不是文件,而不是目录。