我正在尝试在.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]
可能需要注意的是,显示的网址为/images/?query_string
,而不是index.php?query_string
,因此它没有进行完全重定向,但外部请求正在从网页请求中收到301响应。
答案 0 :(得分: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]
答案 1 :(得分: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]