1

我正在尝试从 WordPress URLS 中删除 index.php。

我的 httpd.ini 文件中有这段代码

[ISAPI_Rewrite]

RewriteCond Host: domain\.com
RewriteRule (.*) http\://www.domain.com$1 [I,RP]

RewriteRule /(?!index\.php)([^/.]+)/ /index.php/$1 [I]

RewriteRule /(?!index\.php)([^/.]+) /index.php/$1 [I,L]

这有效,但仅适用于类别,例如 domain.com/gear 有效,但 domain.com/gear/post 无效。

我找到了这篇文章,但我无法真正关注它http://www.helicontech.com/forum/14820-Wordpress_Permalinks_for_ISAPI_Rewrite_2.html

有什么建议么?

4

2 回答 2

1

尝试以下解决方案:

[ISAPI_Rewrite]

RewriteCond Host: domain\.com
RewriteRule (.*) http\://www.domain.com$1 [I,RP]

RewriteRule /(?!index\.php)([^.]+?)/? /index.php/$1 [I,L]
于 2013-07-01T10:03:59.833 回答
0

我知道这是一篇较旧的帖子,但如果您仍然需要解决方案或其他建议,这对我有用,适用于什么场景。

当您尝试在共享主机环境中运行 WordPress 并使用 IIS 6 服务器运行 Windows 2003 时,您可能会遇到自定义永久链接并发出问题,而自定义永久链接可能无法正常工作,例如 /%postname%/ 将返回 404 错误。

如果您的 ISP 安装了 ISAPI_Rewrite 2 并使用 ISAPI_Rewrite 将流量重定向到不同的站点,这可能对您有用。我已经缩短了 httpd.ini 以展示这对 WordPress 的两个实例是如何工作的。

这个 httpd.ini 位于您所有站点的根目录中,并为您的所有站点设置了规则。

[ISAPI_Rewrite]

### subdomain redirect v2 ###
RewriteCond Host: (?:.+\.)?your-domain-name1\.com
RewriteCond URL ^/site-path1/(.*)
RewriteCond METHOD GET
RewriteRule ^/site-path1/(.*) /$1 [I,R]
RewriteCond Host: (?:.+\.)?your-domain-name1\.com
RewriteCond METHOD POST
RewriteRule ^/site-path1/(.*) /$1 [I]
RewriteCond Host: (?:.+\.)?your-domain-name1\.com
### RewriteRule (.*) /site-path1/$1 [I,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/wp-admin/?$ /newhat/wp-admin/index.php [I,L]
RewriteRule ([^.]*) /site-path1/index.php/$1 [I,L]
RewriteRule (.*) /site-path1/$1 [I,L]

### subdomain redirect v2 ###
RewriteCond Host: (?:.+\.)?your-domain-name2\.com
RewriteCond URL ^/site-path2/(.*)
RewriteCond METHOD GET
RewriteRule ^/site-path2/(.*) /$1 [I,R]
RewriteCond Host: (?:.+\.)?your-domain-name2\.com
RewriteCond METHOD POST
RewriteRule ^/site-path2/(.*) /$1 [I]
RewriteCond Host: (?:.+\.)?your-domain-name2\.com
### RewriteRule (.*) /site-path2/$1 [I,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/wp-admin/?$ /newhat/wp-admin/index.php [I,L]
RewriteRule ([^.]*) /site-path2/index.php/$1 [I,L]
RewriteRule (.*) /site-path2/$1 [I,L]

未注释版本中的行### RewriteRule (.*) /site-path2/$1 [I,L]是修改前原始 ISP 配置的最后一行。我在它之前插入了 4 个新行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/wp-admin/?$ /newhat/wp-admin/index.php [I,L]
RewriteRule ([^.]*) /site-path2/index.php/$1 [I,L]

这个SO 链接解释了重写规则。

我对这一行的理解RewriteRule ([^.]*) /site-path2/index.php/$1 [I,L]是,对于任何不包含句点的 URL,将其重写为 append index.php。这就是为什么它需要在(.*)获取所有内容的行之前。

管理工具栏,如果显示有一个链接到/wp-admin/没有指定index.php哪个规则RewriteRule ^/wp-admin/?$ /newhat/wp-admin/index.php [I,L]

另一篇对此有所帮助的文章/网站是在线 Apache mod_rewrite测试器。

于 2013-10-20T04:45:59.270 回答