有关 mod_rewrite 和 mod_redirect 的帮助

发布于 2024-09-27 07:24:32 字数 1108 浏览 0 评论 0原文

我的 .htaccess 文件是:

Redirect 301    http://domain.com/news/articles?dtMain_start=150    http://domain.com/news/articles
Redirect 301    http://domain.com/news/articles?dtMain_start=160    http://domain.com/news/articles
Redirect 301    http://domain.com/news/articles?dtMain_start=170    http://domain.com/news/articles
# 
RewriteEngine On
RewriteBase /

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

我还必须纳入以下规则

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.co.uk/$1 [R=301,L]

,我无法让它们一起工作...任何人都可以帮忙...

我尝试在 RewriteCond 之前堆叠重定向,我得到了这个... http://www.domain.com/news/articles?q=news/articles?dbMain_start=150
http://domain.com/newpage?q=oldpage

好吧,Mod_Alias 和 Mod_Rewrite 互不喜欢。

我可以写一些类似的东西:

RewriteCond %{REQUEST_QUERY_STRING} ^.*&bodgeredirect=true$
RewriteRule ^(.*)&bodgeredirect=true$ index.php?q=$1 [L,QSA]

My .htaccess file is:

Redirect 301    http://domain.com/news/articles?dtMain_start=150    http://domain.com/news/articles
Redirect 301    http://domain.com/news/articles?dtMain_start=160    http://domain.com/news/articles
Redirect 301    http://domain.com/news/articles?dtMain_start=170    http://domain.com/news/articles
# 
RewriteEngine On
RewriteBase /

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

I also have to incorporate the following rule

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.co.uk/$1 [R=301,L]

I cannot get them to work together... can anyone help...

I tried just stacking the Redirects before the RewriteCond and I get this...
http://www.domain.com/news/articles?q=news/articles?dbMain_start=150
ie http://domain.com/newpage?q=oldpage

Okay Mod_Alias and Mod_Rewrite don't like each other.

Can I write something like:

RewriteCond %{REQUEST_QUERY_STRING} ^.*&bodgeredirect=true$
RewriteRule ^(.*)&bodgeredirect=true$ index.php?q=$1 [L,QSA]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫九 2024-10-04 07:24:32

首先: 没有 mod_redirect。 Redirect 是 mod_alias 的指令。

与 mod_alias 的任何其他指令一样,Redirect 指令仅适用于 URL 路径。因此您的 Redirect 指令将无法按预期工作。使用 mod_rewrite 等效项:

RewriteCond %{HTTP_HOST} =example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{QUERY_STRING} ^dtMain_start=(150|160|170)$
RewriteRule ^news/articles$ /news/articles? [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

一般来说,如果模式彼此一致,则混合 mod_alias 和 mod_rewrite 并不是一个好主意。

First of all: There is not mod_redirect. Redirect is a directive of mod_alias.

And the Redirect directive, like any other directive of mod_alias, does only work with the URL path. So your Redirect directives won’t work as expected. Use mod_rewrite equivalents instead:

RewriteCond %{HTTP_HOST} =example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{QUERY_STRING} ^dtMain_start=(150|160|170)$
RewriteRule ^news/articles$ /news/articles? [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

In general it is not a good idea to mix mod_alias and mod_rewrite if the patterns coincide with each other.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文