.htaccess有多个要求

时间:2014-10-21 14:56:11

标签: php apache .htaccess mod-rewrite redirect

我的.htaccess文件需要提供以下内容:

  • 强制HTTPS
  • 强迫WWW
  • 删除PHP文件扩展名
  • 尾部斜杠(可选)
  • 强制particulars.php?id = XXX to particulars / XXX(如果使用尾随斜线)
  • 强制properties.php?location = 1& rooms = 2& rent = 3& sort = 4 to properties / 1/2/3/4(如果使用尾随斜杠)

我设法最接近(包括强制WWW,删除PHP文件扩展名并添加尾部斜杠)如下:

RewriteEngine On
RewriteBase /

# Force WWW prefix
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} ^([^.]+)\.([a-z]{2,4})$ [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove .php extension
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)/$ $1.php [L]

# Force trailing slash
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

但我无法自定义此内容以涵盖上述所有内容。我尝试了.htaccess规则的多种组合无效,那么有没有.htaccess位专家愿意提供帮助吗? =)

1 个答案:

答案 0 :(得分:1)

Force WWW prefix阻止后,您可以拥有以下附加规则:

RewriteCond %{THE_REQUEST} \s/+(properties)\.php\?location=([^\s&]+)&rooms=([^\s&]+)&rent=([^\s&]+)&sort=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/%3/%4/%5? [R=302,L]

RewriteRule ^(properties)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ $1.php?location=$2&rooms=$3&rent=$4&sort=$5 [L,QSA,NC]

RewriteCond %{THE_REQUEST} \s/+(properties)\.php\?id=([^\s&]+)\s [NC]
RewriteRule ^ /%1/%2? [R=302,L]

RewriteRule ^(properties)/([^/.]+)/?$ $1.php?id=$1 [L,QSA,NC]

修改强制HTTPS # Force WWW prefix规则更改为:

# Force WWW prefix
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.domain.com%{REQUEST_URI} [R=301,L]

www.domain.com到您的实际域名。