如何解决使用 .htaccess [#Q2.] 修改 URL
我想使用 .htaccess
修改我服务器上的 URL,但我遇到了一些问题。
在我的 previous question 中,我描述了我想要的所有修改。我想在 previous rules 旁边添加一些新规则。
RewriteEngine On
# matches /site/ or /site/index.PHP or
# /a/site/index.PHP or /b/site/index.PHP
# captures a/ or b/ or an empty string in %1
# redirects to /a/ or /b/ or /
RewriteCond %{THE_REQUEST} \s/+([ab]/|)site/(?:index\.PHP)?[?\s] [NC]
RewriteRule ^ /%1 [L,R=302,NE]
# matches a/ or b/ or empty (landing page)
# rewrites to a/site/index.PHP or b/site/index.PHP or site/index.PHP
RewriteRule ^([ab]/)?$ $1site/index.PHP [L,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.PHP -f
RewriteRule ^(.+?)/?$ $1.PHP [L]
新规则 #1:
https://example.com/site/index.PHP
(已经)
https://example.com/site/index
(不会)
https://example.com/site/
(已经)
应该转换为短网址。
https://example.com/
新规则 #2:
https://example.com/a/site/index.PHP
(已经)
https://example.com/a/site/index
(不会)
https://example.com/a/site/
(已经)
应该转换为短网址。
https://example.com/a/
新规则 #3:
https://example.com/site/any.PHP
(不会)
https://example.com/site/any
(不会)
应该转换为短网址。
https://example.com/any/
新规则 #4:
https://example.com/any/
(不会)
应加载完整网址而不展开。
https://example.com/site/any.PHP
注意: any.PHP
是动态的,意味着它是 ([\w]+).PHP
,我不知道写 .htaccess
,任何帮助将不胜感激.
解决方法
您可以在站点根目录 .htaccess 中尝试这些规则:
RewriteEngine On
# matches /site/ or /site/index.php or
# /a/site/index.php or /b/site/index.php
# captures a/ or b/ or an empty string in %1
# redirects to /a/ or /b/ or /
RewriteCond %{THE_REQUEST} \s/+([ab]/|)site/(?:index(?:\.php)?)?[?\s] [NC]
RewriteRule ^ /%1 [L,R=302,NE]
# removes site/ from URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \s/+site/(\S+?)(?:\.php)?/?\s [NC]
RewriteRule ^ /%1/ [L,NE]
# remove .php from all URLs
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1/ [R=302,NE,L]
# add trailing slash to all URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,NE]
# matches a/ or b/ or empty (landing page)
# rewrites to a/site/index.php or b/site/index.php or site/index.php
RewriteRule ^([ab]/)?$ $1site/index.php [L,NC]
# adds .php internally to /any
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
# adds .php internally to /site/any
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/site/$1.php -f
RewriteRule ^(.+?)/?$ site/$1.php [L]
每条规则前都有注释以阐明其作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。