如何解决如何使用htaccess删除部分网址
关于堆栈溢出,我已经看了很多类似的问题,但是我尝试过的似乎不起作用。
'quotes'是其中装有wordpress安装程序的子文件夹。因此,主根目录中有一个wordpress站点,“ quotes”子文件夹中也有一个wordpress安装。
我有一条类似的路径
https://example.com/quotes/uk/travel-packages
https://example.com/quotes/us/travel-packages
但是我不希望在URL中包含“引号”,而应该只是
https://example.com/uk/travel-packages
我目前有这个
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /example/
RewriteRule ^index\.PHP$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /example/index.PHP [L]
RewriteRule ^quotes/(.*)$ /$1 [L,NC,R]
RewriteRule ^uk/(.*) /quotes/$1 [L]
RewriteRule ^us/(.*) /quotes/$1 [L]
</IfModule>
编辑:我正在本地主机上尝试此操作,因此重写基础为/ example /,所以我现在了解那里的混乱情况。
这是根目录和根目录中引号子文件夹的实时服务器.htaccess文件。
ROOT:
# BEGIN wordpress
# The directives (lines) between "BEGIN wordpress" and "END wordpress" are
# dynamically generated,and should only be modified via wordpress filters.
# Any changes to the directives between these markers will be overwritten.
<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
QUOTES subdirectory
# BEGIN wordpress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /quotes/
RewriteRule ^index\.PHP$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /quotes/index.PHP [L]
</IfModule>
# END wordpress
解决方法
如果/quotes
是包含WordPress安装的子目录,并且您已经从WordPress本身的URL中删除了/quotes
,则需要配置两个.htaccess
文件:
-
文档根目录中的一个,用于内部(无条件)重写对
/quotes
子目录的所有请求。 -
以及
.htaccess
子目录中的另一个/quotes
文件,该文件将请求路由到WordPress-包含“标准” WordPress前端控制器。
在{root} /.htaccess
文件中:
RewriteEngine On
# Internally rewrite all requests to WordPress subdirectory
RewriteRule ^ quotes%{REQUEST_URI} [L]
在/quotes/.htaccess
文件中:
RewriteEngine On
# OPTIONAL...
# Redirect any direct requests for "/quotes/<anything>" back to root
# NB: WP itself *must* already be correctly configured to omit "/quotes" from the URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /$1 [R=301,L]
# WordPress front-controller
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
对REDIRECT_STATUS
环境变量的检查是为了确保WP前端控制器仅重定向直接请求而不会重写请求-否则会导致重定向循环。
或者,您在文档根目录中只有一个.htaccess
文件(并在.htaccess
-WordPress子目录中删除了/quotes
文件)。例如:
RewriteEngine On
RewriteBase /quotes
# OPTIONAL...
# Redirect any direct requests for "/quotes/<anything>" back to root
# NB: WP itself *must* already be correctly configured to omit "/quotes" from the URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^quotes/(.*) /$1 [R=301,L]
# WordPress front-controller
RewriteRule ^quotes/index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
从您的问题更新看来,您在文档根目录中也有第二个WordPress安装。除非两个站点之间的URL结构存在可辨别的区别,否则不可能有两个单独的WordPress安装并使其在文档根目录中显示为单个WP站点(即,未指定子目录作为URL的一部分)。否则,您将不知道应该将哪些URL路由到子目录中的WP安装,以及将哪些URL路由到文档根目录中的站点。
任何有
/us
或/uk
或将来有任何国家/地区扩展名的人都应该去/quotes
,否则应该去路线或从根站点调用任何页面,例如,https://example.com/contant-us
应该转到根与我们联系页面。
是的,这是可能的。对于“任何”国家/地区扩展名,我假设使用2个小写字母a-z组成的字符串。尽管这确实意味着文档根目录中的WP网站不能包含任何以2个字母的路径段开头的URL。
通常,您将修改现有的指令(如上所述)。但是,由于这是WordPress,因此不应修改# BEGIN WordPress
代码块中的指令(除非您阻止WP对此进行修改)。取而代之的是,我们将在WP前控制器的之前添加一些指令。
在{root} /.htaccess
文件中:
# Rewrite any URLs that contain a language code prefix to the subdirectory
RewriteRule ^[a-z]{2}/ quotes%{REQUEST_URI} [L]
# BEGIN WordPress
# : (Remainder of existing .htaccess file goes here)
在/quotes/.htaccess
文件中:
# OPTIONAL...
# Redirect any direct requests for "/quotes/<anything>" back to root
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /$1 [R=301,L]
# BEGIN WordPress
# : (Remainder of existing .htaccess file goes here)
这假定您将直接访问静态资源。例如。使用/quotes
子目录获取此站点中包含的资源,因此/quotes
子目录不会完全隐藏。
有关在子目录中第二次安装WordPress可能丢失静态资源(图像,CSS和JS)的静态资源(图像,CSS和JS)的信息,请参见my answer至part two of this question。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。