2016-07-17 127 views
0

我想将URL 从:http://some-url/pl/news/重定向到http://some-url/blog。但是当用户类型也是http://some-url/news/(不带/ pl)时,还想将其重定向到:http://some-url/blog。正因为如此我写了一个规则:在.htaccess中重写规则

RewriteRule (pl)?/news(.*) /blog/ [R=301,L] 

当我正则表达式测试它在这两种情况下,不是用/ PL或没有它匹配测试。但是当我尝试在.htaccess测试程序中测试此规则时,它只会在存在带有/pl的URL时匹配。有人能解释一下吗,为什么会这样呢?以正确的方式写这条规则的正确方法是什么?

+0

可能重复的[提示调试.htaccess重写规则](http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules) – jpaljasma

回答

0

我不是100%确定为什么会发生这种情况,所以我的建议是尝试将它放在.htaccess文件中,看看它是否有效。

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_URI} /pl/news(.*) [OR] 
RewriteCond %{REQUEST_URI} /news(.*) 
RewriteRule .* /blog [R=301] 
+0

不幸的是,它不工作 –

0

尝试这样的事情也许

RewriteRule ^(pl/)?news/?$ /blog/ [R=301,L] 
1

在您的Web服务器,你如何重定向一个网页到另一个的根级使用的htaccess是:

RewriteRule ^url-string-to-redirect$ http://www.yourdomain.com/your-new-url-string [R=301,L] 

或者

Redirect 301 /path/to-old-url http://www.cyourdomain.com/path/to-new-url 

重定向co整个目录到另一个的ntents使用以下:

RewriteRule ^subdirectory/(.*)$ /anotherdirectory/$1 [R=301,NC,L] 

要将整个目录的内容重定向到webserving根:

RewriteRule ^subdirectory/(.*)$ /$1 [R=301,NC,L] 

向子目录的内容重定向到另一个域,但在相同的子目录

Redirect 301 /subdirectory http://www.anotherdomain.com/subdirectory 

确保.htaccess文件的开口包含2行代码下面这使得Apache模块重写网址,则N将在它们下面您重定向

Options +FollowSymLinks 
RewriteEngine On 

重定向的URL从旧到新域名使用301个重定向在.htaccess

当你需要从旧域切换网站到一个新的领域,你需要重定向所有的网页网址,这是当htaccess是你的朋友。

下面的代码将为newDomain.com的www和非www版本的olddomain.com创建301个url重定向。

将此.htaccess文件添加到旧网站webroot,并将文件从旧网站上传到新网站,以查看从旧网域到新网域的无缝切换。

所以下面的例子中被重定向从olddomain.com所有URL到newdomain.com

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.olddomain\.com$ 
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} !^olddomain\.com$ 
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L] 

您也可以应用此子域 - 所以下面的例子是从subdomain.olddomain.com重定向所有URL到subdomain.newdomain。COM

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^subdomain.olddomain.com$ 
RewriteRule ^(.*)$ http://subdomain.newdomain.com/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^www.subdomain.olddomain.com$ 
RewriteRule ^(.*)$ http://subdomain.newdomain.com/$1 [R=301,L] 

要强制网站使用HTTPS上运行整个网站的安全协议SSL你可以做一个简单的编辑在文档根目录的.htaccess文件。

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

要强制特定文件夹或目录服务通过SSL,该文件夹中创建一个.htaccess文件,并应用以下它:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} somefolder 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L] 

这是假定SSL是在域上启用启用mod_rewrite模块的Apache Web服务器。