我试图删除.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]请给我建议谢谢。
发布于 2017-08-16 10:58:38
您可以将这个.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]发布于 2017-08-16 10:59:00
您可以使用下面的regex从URL捕获所需的字段。然后使用捕获的值1,2生成输出。
([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\/[A-Za-z0-9]*).*(\/.*)\.php你可以在这里看到演示。它在1中捕获地址和父文件夹,在2中捕获文件名。
注:我认为地址是ipv4
发布于 2017-08-16 10:49:26
基于您在对问题的评论中所作的澄清--仅通过RewriteRule很难动态处理这一问题。
考虑到这一点:
Apache如何知道/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文件。如果只找到一个文件,则需要它才能运行它。
https://stackoverflow.com/questions/45710824
复制相似问题