【问题标题】:WordPress & .htaccessWordPress 和 .htaccess
【发布时间】:2014-01-10 18:15:56
【问题描述】:

我在 WordPress 下有一个网站,我在其中创建了一个新页面 www.foo.com/section/

这个想法是创建一个永久链接,如 www.foo.com/param1/type/param2 并使用 .htaccess 使用重写规则:www.foo.com/section/?var1=param1&var2=param2&var3=type

RewriteEngine on
Options +FollowSymlinks
RewriteRule ^([a-z0-9_\s-.()&]+)/section1/([a-z0-9]+)$ /section/?var1=$2&var2=$1&var3=section1
RewriteRule ^([a-z0-9_\s-.()&]+)/section2/([a-z0-9]+)$ /section/?var1=$2&var2=$1&var3=section2

我让它在我的旧网站上运行,但在 WordPress 崩溃时。

#My rules -> copy&paste
RewriteRule ^([a-z0-9_\s-.()&]+)/section1/([a-z0-9]+)$ /section/?var1=$2&var2=$1&var3=section1
RewriteRule ^([a-z0-9_\s-.()&]+)/section2/([a-z0-9]+)$ /section/?var1=$2&var2=$1&var3=section2
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress        

我只有一个漂亮的 WordPress 404 页面

我在这里阅读了几个问题,但没有人帮助我。

感谢您的宝贵时间和问候,

R.

1 月 13 日

我创建了一个简单的测试来检查它。

新结构可以毫无问题地处理测试用例:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^lol/$ project/ [L] #Rule 1
RewriteRule ^foo/$ test/ [L] #Rule 2

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  1. 规则 1,我在 WordPress 根目录中创建了一个子文件夹,名为“project”,其中 index.php 回显“Hi dad”,当键入 www.foo.com/lol/ 时,它会加载该脚本并呼应这个词。
  2. 规则 2,我创建了一个新的 WordPress 页面,www.foo.com/test/ 用一个简单的字符串来显示,但是当我写 www.foo.com/foo/ 时,它给了我错误 404。似乎重定向到 wp 页面没有按我的预期工作。

免责声明:当然是 www.foo.com/test/

现在我被困住了。

感谢您之前的回复和未来的帮助。

最好的问候,

R.

1 月 14 日

我有新消息:)

有效的新 .htaccess 是:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^([a-z0-9_\s-.()&]+)/alternator/([a-z0-9]+)$ ?page_id=554&supplier=$1&reference=$2&ref_type=A [L]
RewriteRule ^([a-z0-9_\s-.()&]+)/starter_motor/([a-z0-9]+)$ ?page_id=554&supplier=$1&reference=$2&ref_type=M [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

而是重定向到我指向“?page_id=554”的.htaccess 中的“elecfinder/”,至少它不会给我错误 440

我正在研究交流发电机和起动电机的网站。

我的网址是http://www.elecfinder.com/hitachi/starter_motor/s114850,实际上是http://www.elecfinder.com/info/?supplier=hitachi&ref_num=M&reference=s114850,我在这里加载参考信息。

http://wp.elecfinder.com/elecfinder/?reference=s114850&supplier=hitachi&ref_type=M 是 wp 中的那个网络,所以我的想法是将http://wp.elecfinder.com/hitachi/starter_motor/s114850/ 重定向到这个。

现在我可以将http://wp.elecfinder.com/hitachi/starter_motor/s114850 重定向到http://wp.elecfinder.com/elecfinder/?page_id=554&supplier=hitachi&ref_num=M&reference=s114850,但有两个问题:

  1. 它将 url 更改为 http://wp.elecfinder.com/elecfinder/,而不是维护 wp.elecfinder.com/hitachi/starter_motor/s114850
  2. 缺少 GET 参数“reference”、“supplier”和“ref_type”

感谢您的宝贵时间。

最好的问候,

R.

【问题讨论】:

  • 你的规则在RewriteEngine On之前

标签: wordpress .htaccess get


【解决方案1】:

尝试以下方法:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^([a-z0-9_\s-.()&]+)/(section1|section2)/([a-z0-9]+)$ section/?var1=$1&var2=$3&var3=$2 [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

始终将您的规则放在 RewriteEngine on 之后。 而且,在这种情况下(WordPress),请务必将您的规则放在 之前 WordPress 的规则(这里将所有内容重定向到 index.php,因为 WordPress 有一个前端控制器并且它管理自己的重写)。

【讨论】:

  • 它适用于 wordpress 项目中的外部文件夹,但如果我尝试重定向到 wp 页面,则会失败。我在开头添加了更多信息。谢谢:)
  • 在您的测试中,它应该是 ^foo/$(带有斜线),因为您正在尝试访问 www.foo.com/foo/。否则,如果您想访问 www.foo.com/foo(不带斜杠),您将拥有 ^foo$
  • 复制字符串时出错。在 .htaccess 中就可以了。
  • 它返回 404 因为它必须通过前端控制器(您的 index.php)。我不认为你可以直接这样做。您应该使用所需的参数重定向到 index.php 以指向您的 wp 页面。
  • 您能再解释一下吗?请。
猜你喜欢
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多