2016-04-28 59 views
1

我想结合两个htaccess重写规则:一个处理扩展链接,另一个发送缺失文件到索引页面来处理它们。我分别为他们编写代码,但将两者结合起来很棘手。试图创建一个htaccess文件来处理无扩展文件和丢失的文件

的规则是这样的:

  1. 如果URI是一个目录,进入它,让其中的索引文件处理。
  2. 如果URI有扩展名并且文件存在,请转到该文件。
  3. 如果URI没有扩展名,则添加.php文件,如果存在则转到该文件。
  4. 对于任何不存在的文件(有或没有扩展名),将其发送到索引文件进行处理。

原因是我有一些静态页面,有些是从数据库动态创建的。

FYI在 “扩展名” 的代码是

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

和 “重定向到指数” 的代码是

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

回答

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

anubhava和Rijul的代码在我的测试中都能正常工作,所以谢谢你们。我接受anubhava只是因为它是第一次,除非有更多的知识可以指出更好的解决方案。 – Eddystone

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里面请求了哪个url。对于GETurl参数被添加,你可以在php文件中使用$_GET['url']

相关问题