繁体   English   中英

重写URL:从URL中删除子文件夹和文件扩展名

[英]Rewrite URL : remove sub folders and file extension from URL

我试图从URL中删除.php文件扩展名和文件夹&&子文件夹(如果存在)。

情况1

输入:

127.0.0.1/project/folder/alfa.php

输出:

127.0.0.1/project/alfa

案例2

输入:

127.0.0.1/project/folder/subfolder/beta.php

输出:

127.0.0.1/project/beta

这是我到目前为止所得到的:

删除只是扩展工作正常,有删除文件夹的问题

# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^((?! folder/).+?)/?$ folder/ [L,NC]


RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

请指教谢谢。

您可以将此.htaccess放在/project/目录中:

RewriteEngine On
RewriteBase /project/

# rewrite to folder/subfolder/
RewriteCond %{DOCUMENT_ROOT}/project/folder/subfolder/$1.php -f
RewriteRule ^(.+?)/?$ folder/subfolder/$1.php [L]

# rewrite to folder/
RewriteCond %{DOCUMENT_ROOT}/project/folder/$1.php -f
RewriteRule ^(.+?)/?$ folder/$1.php [L]

您可以使用以下正则表达式从URL捕获必填字段。 然后使用捕获值1,2生成输出。

([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\/[A-Za-z0-9]*).*(\/.*)\.php

你可以在这里看到演示 它捕获1中的地址和父文件夹以及2中的文件名。

注意:我认为地址是ipv4

根据您对您的问题的评论中的澄清 - 这将很难通过RewriteRule单独动态处理。

考虑一下:

如何阿帕奇知道/project/beta地图, /project/folder/subfolder/beta.php/project/alfa映射到/project/folder/alfa.php

你可以这样硬编码:

RewriteRule ^project/beta/? /project/folder/subfolder/beta.php [QSA,L]

RewriteRule ^/project/alfa/? /project/folder/alfa.php [QSA,L]

如果由于此处需要大量规则而不可行,我将尝试通过脚本解决此问题。 像这样的东西:

如果请求的资源不是文件或目录,则将其发送到脚本。 然后让脚本搜索目标目录结构,例如/project以查找与屏蔽URL的第二部分(alfa / beta部分)匹配的所有php文件。 如果只找到一个文件则需要它才能运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM