尝试创建一个htaccess文件来处理无扩展文件和丢失文件

时间:2016-04-28 17:46:36

标签: php apache .htaccess mod-rewrite url-rewriting

我正在尝试结合两个htaccess重写规则:一个用于处理无扩展链接,另一个用于将丢失的文件发送到索引页面来处理它们。我有单独的工作代码,但将两者结合起来很棘手。

规则是这样的:

  1. 如果URI是一个目录,请转到它并让其中的索引文件处理它。
  2. 如果URI有扩展名且文件存在,请转到它。
  3. 如果URI没有扩展名,请添加.php并转到该文件(如果存在)。
  4. 对于任何不存在的文件(有或没有扩展名),请将其发送到索引文件进行处理。
  5. 原因是我有一些静态页面,有些是从数据库动态创建的。

    FYI"无扩展"代码是

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^([^.]+)/?$ $1.php [L]
    

    和"重定向到索引"代码是

    RewriteEngine On
    RewriteRule (.*) index.php [PT,QSA] 
    

2 个答案:

答案 0 :(得分:1)

这样做:

DirectoryIndex index.php
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

答案 1 :(得分:1)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [L]

在案例4中,如果您必须处理不存在的文件请求(有或没有扩展名),您需要知道在index.php内请求了哪个网址。为此,添加GET url参数,您可以在$_GET['url']

的php文件中使用它