1

我正在尝试使用 .htaccess 重写和重定向来完成一些任务,但是在让它们很好地协同工作时遇到了问题。我正在努力完成三件事-

  1. http://www.domain.com/directory/index.php?p=page形式的 URL需要重写/重定向到http://www.domain.com/directory/page
  2. 任何非 WWW 请求都应重定向到 www。版本
  3. 只有某些页面应该被重定向并在 https 下提供,而其他所有页面都被重定向(如果需要)并在 http 下提供

这是我目前所拥有的,它正在处理上面的 1 和 2。#3被证明是挑战:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#Rewrite for dynamic subpages (/directory/index.php?sitepage=page)
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ $1/index.php?sitepage=$2 [L]

#Root level pages remove php extension
RewriteRule ^([a-zA-Z0-9_-]+)$ $1.php [L]   

任何帮助是极大的赞赏!

4

1 回答 1

1

您需要确保重定向高于路由规则(最后 2 个):

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# All the pages that must be HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(directory1/page1|directory1/page2|page3)
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

#Rewrite for dynamic subpages (/directory/index.php?sitepage=page)
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ $1/index.php?sitepage=$2 [L]

#Root level pages remove php extension
RewriteRule ^([a-zA-Z0-9_-]+)$ $1.php [L]   
于 2013-11-14T01:04:17.313 回答