rewriteengine和直接结合htaccess

时间:2015-08-13 06:06:26

标签: .htaccess redirect rewrite

我有一个编码脚本,显示类似example.com/pagename的网址。

我想使用rewriteengine来显示example.com/page=pagename 并将example.com/pagename重定向到example.com/以隐藏脚本类型代码。

你可以帮我吗?

是否可以将``完全改为page=之类的其他东西? 这正是我想要做的。

我已经尝试了一些像

这样的代码
RewriteEngine On
RewriteRule ^page\=([^/]*)$ /$1 [L]

它正确显示example.com/page=pagename,但您可以加载example.com/pagenameexample.com/page=pagenamepagename

1 个答案:

答案 0 :(得分:2)

  

但您可以加载example.com/?a=pagename

为了防止这种情况,您还需要外部重定向到您想要的URL(在内部重写之前)。为了防止重写循环,您可以查看THE_REQUEST

# Redirect typed URLs to the desired URLs
RewriteCond %{THE_REQUEST} \?a=([^\ ]*)
RewriteRule ^$ /page=%1? [R,L]

替换上的尾随?会删除原始查询字符串。 (如果您对重定向感到满意,请将其更改为永久重定向,R=301。)

  

但您可以加载... example.com/page=pagename?a=pagename

嗯,这是预期的。但是,page=pagename将优先,?a=pagename将被您的重写剥离。但是,要拒绝这样的请求。即。仅在没有查询字符串时重写,然后使用以下条件修改现有规则:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^page=([^/]*)$ /?a=$1 [L]

这将导致此类URL触发404。

更新#1 :要处理example.com/pagename的请求,而不是example.com/page=pagename

# Redirect "ugly" URLs to the desired URLs
RewriteCond %{THE_REQUEST} \?a=([^\ ]*)
RewriteRule ^$ /%1? [R,L]

# Internally rewrite the "pretty" URL to the real URL
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]*)$ /?a=$1 [L]

更新#2:以上更严格的版本。这只允许" pagename"由字符a - zA - Z0 - 9_和{{1}组成}}:

-