htaccess url重写问题

时间:2014-05-23 17:50:32

标签: apache .htaccess mod-rewrite

我的htaccess文件规则存在问题..

我的代码将所有带http://website.com/secure/ *的网址重定向到CGI-BIN,网址中没有cgi-bin文件夹。

RewriteEngine on
RewriteRule ^secure/$ /cgi-bin/secure/home.pl
RewriteRule ^secure/?(.*)$ /cgi-bin/secure/$1

问题是:如果我使用的话,我找不到404:

http://website.com/secure  (without last slash)

此外,我尝试将此.htaccess与http合并到https(仅适用于此部分,而不是整个网站。

我不知道是否可以帮助我,如果你有一个很好的教程来向我解释基本/复杂的htaccess编码。

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

首先,重定向到HTTPS,输入网址匹配/secure。有几种方法可以使用RewriteCond来处理它。我们将通过匹配%{REQUEST_URI}来实现此目的。

RewriteRule中真正缺少的是第一条规则中的可选斜杠。我会将/?添加到第一个,并在第二个中使用(.+)而不是(.*)

RewriteEngine On

# First redirect to HTTPS if HTTPS isn't already on
# The first RewriteCond makes sure this only matches for /secure
# and doesn't force everything on your site into https.
RewriteCond %{REQUEST_URI} ^secure
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302,QSA]

# Then fix the rewrite rules
# Nothing after secure goes to home.pl
RewriteRule ^secure/?$ /cgi-bin/secure/home.pl [L]
# Something present after secure/ (.+) is captured in $1
RewriteRule ^secure/(.+)$ /cgi-bin/secure/$1 [L]

如果重写为cgi-bin/应该保留查询字符串,请使用[L,QSA]而不是[L]