获取.htaccess文件以在子文件夹中工作

时间:2014-12-24 21:42:23

标签: regex apache .htaccess

我终于想出了如何使用.htaccess文件在我的网站上运行某些东西。

  1. 将所有非www请求重定向到www版本。 DONE。
  2. 删除所有php文件扩展名并添加尾部斜杠。 DONE。
  3. 禁止目录视图。 DONE。
  4. 限制缓存。 DONE。
  5. 将404请求重定向到主页。 DONE。
  6. 这一切似乎运作良好,但只在ROOT目录中。

    它在子文件夹中不能很好地工作。不删除PHP扩展。网址中的文件夹路径消失。

    由于我是.htaccess文件和正则表达式的新手,并且到了这一点需要花费一些时间和大量的反复试验,我对于进一步篡改代码犹豫不决。

    我将不胜感激任何指导:

    1. 如何针对子文件夹优化此文件。
    2. 如何优化此文件。
    3. 谢谢。

      RewriteEngine On
      
      # redirect non-www requests to www version
      RewriteCond %{HTTPS} off
      RewriteCond %{HTTP_HOST} ^example\.net [NC]
      RewriteRule ^(.*)$ http://www.example.net/$1 [R=301,L]
      
      RewriteCond %{HTTPS} on
      RewriteCond %{HTTP_HOST} ^example\.net [NC]
      RewriteRule ^(.*)$ https://www.example.net/$1 [R=301,L]
      
      # remove .php file extensions
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME}\.php -f
      RewriteRule ^([^/]+)/$ $1.php
      
      # add trailing slash
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
      RewriteRule (.*)$ /$1/ [R=301,L]
      
      # disable directory view on web pages
      Options -Indexes
      
      # cached pages will expire in 5 days
      ExpiresActive On
      ExpiresDefault "access plus 5 days"
      
      # re-direct 404 pages to home page
      ErrorDocument 404 /
      

1 个答案:

答案 0 :(得分:3)

保持DocumentRoot/.htaccess像这样:

# disable directory view on web pages
Options -Indexes

# cached pages will expire in 5 days
ExpiresActive On
ExpiresDefault "access plus 5 days"

# re-direct 404 pages to home page
ErrorDocument 404 /
RewriteEngine On
RewriteBase /

# redirect non-www requests to www (both http and https)
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE]

# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

## hide .php extension
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1%2/ [R=302,L,NE]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

验证一切正常后,将R=302替换为R=301。在测试mod_rewrite规则时,请避免使用R=301(永久重定向)。