7

我正在尝试在 .htaccess 中创建 SEO 友好的蒙面重写。htaccess 文件在 localhost 和我的个人服务器上运行良好,但不幸的是在 GoDaddy 的服务器上似乎无法运行。我知道这已经是一个问题,但是为一个打算使用 Godaddy 作为他们的主机的客户工作。

问题是重写似乎强制重定向在浏览器 URL 栏中显示重写的查询字符串,而不是保持在内部。例如。

规则:

RewriteRule ^/?([a-zA-Z0-9-_/]*)$ /index.php?loadPage=$1&mode=cms [L,QSA]

链接:/images重定向到/images/?loadPage=images&mode=cms

这个“应该”/images/和浏览器一样。我在.htaccess下面复制了我的简短内容,为开发块修改了 IP

<Files .htaccess>
    deny from all
</Files>

Options -MultiViews +FollowSymlinks -Indexes

RewriteEngine On
RewriteBase /

# Stop Old redirection from block below
RewriteCond %{REQUEST_URI} "/old/"
RewriteRule (.*) $1 [L]

# Under construction Redirect
RewriteCond %{REMOTE_ADDR} !^0.0.0.0
RewriteCond %{REQUEST_URI} !^/?old/
RewriteRule ^/?(.*) “/old/$1″ [L,QSA]

#Admin utilities rewrite
RewriteRule ^/?admin/?(.*)$ /index.php?loadPage=$1&mode=backend [L,QSA]

#CMS/Frontend rewrites -- this one is failing
RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L]

一个潜在的提示是,显示的 url 是/images/?query_string, NOT index.php?query_string,因此它没有进行完全重定向,尽管外部请求正在接收来自页面请求的 301 响应。

4

2 回答 2

2

我没有测试任何东西,只是看着那条线......

RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L]

有语法错误。9 之后的连字符应该被转义为技术上的范围指示符。大多数情况下,您会看到人们将它放在最后],因此它不会导致错误,因此大多数人认为他们不必逃避它。您也不需要转义正斜杠。也使用问号使前面的可选,并且不知道你为什么想要那个。所以它应该是这样的:

RewriteRule ^([a-zA-Z0-9\-_]+)/?$ /index\.php?loadPage=$1&mode=cms [QSA,L]
于 2013-06-04T23:13:34.950 回答
0

我已经注释掉了其他一些规则,这样你就可以知道发生了什么。您正在使用不以“旧”开头的任何内容并将其重写到旧目录。前面的规则看起来就像你把所有你发现单词'/old/'的东西都拿走了,你把它重定向到它自己。您不应该收到任何来自0.0.0.0任何时候的请求。

最后一条规则中的连字符需要放在括号的末尾,这样 Apache 就不会在寻找范围。

由于我们正在处理.htaccess我们不需要前面的斜杠,如果我们不使用REQUEST_URI.

RewriteEngine On
RewriteBase /

# Stop Old redirection from block below
RewriteCond %{REQUEST_URI} ^/old/(.*)$
RewriteRule .* %1 [L]

# Under construction Redirect
# RewriteCond %{REMOTE_ADDR} !^0.0.0.0
# RewriteCond %{REQUEST_URI} !^/?old/
# RewriteRule ^/?(.*) /old/$1 [L,QSA]

#Admin utilities rewrite
RewriteRule ^admin/(.*)$ index.php?loadPage=$1&mode=backend [L,QSA]

#CMS/Frontend rewrites
RewriteCond %{REQUEST_FILENAME} !^index.php$
RewriteRule ^([A_Za-z0-9_-]+)/?$ index.php?loadPage=$1&mode=cms [QSA,L]
于 2013-06-04T23:32:25.523 回答