同名的WP页面和子目录

时间:2011-01-05 作者:ggutenberg

我在WP安装中有一个子目录,名为labs. 我创建了一个名为labs 也当用户点击mydomain.com/labs/ 我希望他们加载WP页面。但相反,它正在加载labs 目录列表。

如果我希望我的WP页面的名称与目录名不同,我已经阅读了一些方法来实现这一点,但我真的不希望这样。例如,我想要:

mydomain.com/                <-- WP Root
mydomain.com/labs/           <-- Pretty WP page listing all of my projects
mydomain.com/labs/project1/  <-- raw (i.e. no WP) web app
mydomain.com/labs/project2/  <-- raw (i.e. no WP) web app
这可能吗?

我还应该提到,WP安装在mydomain.com, 所以/labs/ 是我手动创建的WP页面和子目录。

<小时>Solution:我重命名了我的labs 文件夹收件人projects 并使用以下内容。htaccess。

RewriteEngine On
RewriteCond %{REQUEST_URI} labs/(.+)$
RewriteCond %{REQUEST_URI} !labs/(.+)/$
RewriteRule ^labs/(.+)$ http://mydomain.com/labs/$1/ [L]
RewriteRule ^labs/(.+)$ projects/$1 [L]
我有点不清楚为什么我必须使用

RewriteRule ^labs/(.+)$ http://mydomain.com/labs/$1/ [L]
而不仅仅是

RewriteRule ^labs/(.+)$ labs/$1/ [L]
但当我使用后者时,它从未附加尾部斜杠。

4 个回复
最合适的回答,由SO网友:sanchothefat 整理而成

你需要做一些。htaccess fu以获得您的工作建议。

RewriteCond $1 ^/labs/(.+)
RewriteRule ^/labs/(.*)$ /labs-folder/$1 [L]
这还没有经过测试,但如果您将其放在htaccess文件中wordpress规则之前,它将重新映射以/labs/开头的url到/labs文件夹,但如果url本身只是“/labs/”,则不会重新映射。

如果不起作用,请告诉我,我将与您一起调试。

您可以将“labs folder”替换为您选择的任何文件夹名称,但本质上是一个url,如:

http://example.com/labs/project1/
将在此处查看:

http://example.com/labs-folder/project1/

SO网友:scribu

你不能同时拥有一个WP页面和一个同名的目录,除非你还创建了/labs/index。php并在其中进行一些奇怪的黑客操作。

另一种解决方案是重命名目录并执行一些操作。htaccess欺骗,使目录中的文件在/labs/URL下提供。

SO网友:Anthony Kozar

我发现(至少在我的托管服务上)没有必要重命名冲突的目录。您需要为希望WordPress处理的每个页面创建一个例外,大致如下:

RewriteCond %{REQUEST_FILENAME} /labs/$ [OR]
RewriteCond %{REQUEST_FILENAME} /page2/$ [OR]
RewriteCond %{REQUEST_FILENAME} /page2/page3/$
RewriteRule . /index.php [L]
这些规则基本上告诉服务器将以这些名称的目录结尾的任何请求传递到/索引。php是WordPress的主脚本。(假设WP位于根目录中)。为了防止匹配任何以/labs/等结尾的URL,有必要使用足够多的路径名来限定条件,以使它们唯一。此处必须使用服务器路径,因为我正在与%{REQUEST\\u FILENAME}进行匹配。我想%{REQUEST\\u URI}会允许您匹配URL,但我还没有尝试过。所以每种情况都变成

RewriteCond %{REQUEST_FILENAME} /path/to/html/labs/$ [OR]
此外,除了最后一行之外,您还需要在每一行的末尾都有一个[或]选项。

然后,我在WordPress创建的用于检查目录或文件是否存在的重写规则之前插入了这些行。以下是最后一套规则:

# Modified WP rewrites
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} /path/to/html/labs/$ [OR]
RewriteCond %{REQUEST_FILENAME} /path/to/html/page2/$ [OR]
RewriteCond %{REQUEST_FILENAME} /path/to/html/page2/page3/$
RewriteRule . /index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]
</IfModule>
请注意,我删除了#BEGIN WordPress注释。然后我做了我的。htaccess文件不可写,以防止WordPress重新添加其规则。不过,我认为这些步骤没有必要。如果您将新规则放在#BEGIN WordPress注释上方,并将其包装在其他行中以打开重写引擎,我认为它们仍然可以工作,但我尚未测试该配置。

我刚刚将我的旧静态HTML站点迁移到WordPress,并试图将所有可下载文件保存在原始目录中,以及它们所属的页面。此设置使其成为可能。

希望这对别人有帮助!

(附:关于降价语法的帮助页在哪里?我找了大约15分钟,没有找到它…)

SO网友:ooscarr

修改您的。htaccess文件而不重命名文件夹:

#a request finished with \'/labs/\'
RewriteCond %{REQUEST_FILENAME} /labs/?$
#processed by wordpress
#change index.php prefix according to your original wordpress .htacccess
RewriteRule . index.php [L]
#put before the other RewriteConds

结束

相关推荐

Custom theme - pages in menu

我很高兴有机会成为这个社区的一员。最近我决定开始学习wordpress和主题构建,所以这是我在这里的第一篇帖子。我在网上阅读了一些关于如何构建自定义主题的教程。我的问题是,如何构建自定义菜单?例如,我在psd上有模板,我将其切片,然后我想将其集成到wordpress上。我支持先构建页面。那么,如何使用自定义css/xhtml构建菜单,使每个链接都指向我创建的页面?也许描述不清楚,但我想你明白我的意思。提前感谢。