【问题标题】:htaccess not redirecting with WordPresshtaccess 不使用 WordPress 重定向
【发布时间】:2015-11-30 21:31:44
【问题描述】:

我正在开发一个 WordPress 网站,并且由于一些顽固的插件,我需要重写 URL 以使结构整洁。但是,我遇到了一个奇怪的问题,我无法自己解决。

我正在尝试做的事情: 重写所有 URL,如: domain.com/location/corporate-housing-SOMETHING/

到: domain.com/corporate-housing/SOMETHING/

如果我包含完整的域路径,它会成功重定向。当我拿走域名时,它给了我一个 404。我已经在多个浏览器上进行了测试,以确保我没有缓存任何东西。我的 .htaccess 文件如下:

#DirectoryIndex maintenance.html index.php index.html
# BEGIN WordPress
<IfModule mod_rewrite.c>
Redirect 301 /location/central-west-end /location/corporate-housing-central-west-end/
Redirect 301 /location/claytonbrentwood /location/corporate-housing-claytonbrentwood/
Redirect 301 /location/downtown /location/corporate-housing-downtown/
Redirect 301 /location/west-county /location/corporate-housing-west-county/
Redirect 301 /location/central /location/corporate-housing-central/
Redirect 301 /location/st-charlesofallon /location/corporate-housing-st-charlesofallon/
Redirect 301 /location/south-county /location/corporate-housing-couth-county/
Redirect 301 /location/metro-east-illinois /location/corporate-housing-metro-east-illinois/
RewriteEngine On
RewriteBase /
RewriteRule ^corporate-housing/([a-zA-Z0-9-]+)/?$  /location/corporate-housing-$1/ [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

建议改成这个,还是不行:

#DirectoryIndex maintenance.html index.php index.html
# BEGIN WordPress
<IfModule mod_rewrite.c>
Redirect 301 /location/central-west-end /location/corporate-housing-central-west-end/
Redirect 301 /location/claytonbrentwood /location/corporate-housing-claytonbrentwood/
Redirect 301 /location/downtown /location/corporate-housing-downtown/
Redirect 301 /location/west-county /location/corporate-housing-west-county/
Redirect 301 /location/central /location/corporate-housing-central/
Redirect 301 /location/st-charlesofallon /location/corporate-housing-st-charlesofallon/
Redirect 301 /location/south-county /location/corporate-housing-couth-county/
Redirect 301 /location/metro-east-illinois /location/corporate-housing-metro-east-illinois/
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^corporate-housing/([^/]+)/?$ /location/corporate-housing-$1/ [NC,L]

RewriteRule ^index\.php$ - [L]
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

找到了解决方案。我在functions.php中添加了以下内容:

add_action( 'init', 'add_rewrite_rules' );
function add_rewrite_rules() {
    add_rewrite_rule( 'corporate-housing/([0-9a-zA-Z-]+)/?', 'index.php?location-categories=corporate-housing-$matches[1]', 'top' );
    add_rewrite_rule( 'furnished-apartments/([0-9a-zA-Z-]+)/?', 'index.php?location-categories=furnished-apartments-$matches[1]', 'top' );
    flush_rewrite_rules();
}

然后在flush rewrite生效后将其注释掉。

【问题讨论】:

  • 这些重定向如何适应您的重写?因为看起来您仍然在 301 重定向中包含 location。好像不太对。
  • 我必须添加另一个类别(带家具的公寓),而永久重定向是为了解决这些问题。这些会与重写冲突吗?

标签: wordpress apache .htaccess mod-rewrite


【解决方案1】:

根据问题,您的规则不正确。规则应该是RewriteRule {rewrite_pattern} {rewrite_target} [{flags}]

RewriteRule ^/location/corporate-housing-([a-zA-Z0-9-]+)/$ corporate-housing/$1/ [NC,L]

【讨论】:

  • 究竟为什么他在不处理任何查询字符串时需要QSA 标志?
  • 不起作用。当我尝试访问 domain.com/corporate-housing/central 时,它仍然给我一个 404。
  • @DavyH 我怀疑你实际上想要它相反,即使你的问题表明应该从domain.com/location/corporate-housing-SOMETHING/ 指向domain.com/corporate-housing/SOMETHING/。请澄清
  • 你是对的。正如我在操作中所说,我正在尝试使所有像 domain.com/location/corporate-housing-SOMETHING/ 这样的网址成为 domain.com/corporate-housing/SOMETHING/
【解决方案2】:

您需要将代码更改为如下所示。检查真实文件或文件夹,如果不存在,则进入下一条规则。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^location/corporate-housing-(.+)/?$ http://www.example.com/corporate-housing/$1 [R=301,NC,L]

RewriteRule ^index\.php$ - [L]
RewriteRule . /index.php [L]

让我知道这对您有什么作用。

【讨论】:

  • 它不工作。我将更新 OP 以显示我将其更改为的内容。
  • 重写是否进入真实目录? /location/corporate-housing-downtown/这是一个真实的目录吗?
  • 那么你真的想要一个重定向吗?从 /location 开始的旧链接听起来就是这样。尝试更新
  • 不,我想重写 URL,使它们以“domain.com/corporate-housing/something/”的方式出现。现在它们显示为“domain.com/location/corporate-housing-something/”
  • 对,您需要更改 Wordpress 永久链接以使用该新格式。然后上面的规则还将domain.com/location/corporate-housing-something/形式的任何旧链接重定向到新的URL。你还需要更新wordpress。 codex.wordpress.org/Using_Permalinks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多