htaccess url重写并重定向无法正常工作

时间:2015-06-21 07:34:59

标签: php apache .htaccess mod-rewrite redirect

我有一个已更新的网站。我想让旧网址有效,我想重定向其中一些,所以谷歌搜索的链接仍然有效,并使用.htaccess重写其他网址的网址。

例如:

  • 一次重写是a.com/consvices to a.com/consultancy
  • 一个重定向是a.com/services/a/b到a.com/consultancy

一个额外的冲突:网站将每个请求发送到/index.php,因为URL不是物理文件,但index.php脚本使用请求的路径进行内部路由,以提供正确的内容。

我不确定我是否可以在同一个htaccess中重写(services-> consultancy)然后另一个重写(consultancy-> index.php)。

尝试此操作时,我收到任何网址的内部服务器错误500:

RewriteEngine On

#NEW
RewriteCond %{REQUEST_URI} ^services$ [NC]
RewriteRule ^services$ consultancy [L]

#LEGACY
RewriteRule (.*) ./index.php

还尝试了Redirect 301指令,但没有运气,同样的错误500。

关于如何将重写,重定向和最终重写混合到index.php的任何想法?

谢谢!

更新

对于重定向和重写的组合,我意识到一些规则与我原来的问题有点不同,这些可能会导致问题,这是一个例子:

# Redirect to show "consultancy" in the URL
RewriteRule ^services/a/b?$ consultancy [QSA,R,L,NC]

# If "consultancy" is in the URL, change it to the real path
# "consultancy" is an alias of the path that should be processed by index.php
RewriteRule ^consultancy/?$ en/consultoria [NC]

# Should get the "en/consultoria" path
RewriteRule ^ ./index.php [L]

上一个例子的问题是我得到了重定向" services / a / b" - > " consultany"好的,但重写"咨询" - > "烯/ CONSULTORIA"没有完成。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

RewriteEngine On

#rewrite
RewriteRule ^services/?$ consultancy [L,NC]

#redirect
RewriteRule ^services/a/b/?$ consultancy [L,NC,R=302]

#LEGACY
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]