2017-08-16 155 views
4

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

案例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] 

请指教 谢谢。

+0

我认为你需要硬编码的项目目录。 – Thamaraiselvam

+1

你的意思是掩盖或重定向?也就是说,我访问'127.0.0.1/project/folder/subfolder/beta.php'并重定向到'127.0.0.1/project/beta',或者你想让用户访问'127.0.0.1/ project/beta'作为“127.0.0.1/project/folder/subfolder/beta.php”的掩码? – Bananaapple

+0

@Bananaapple 试图让用户访问127.0.0.1/project/beta作为127.0.0.1/project/folder/subfolder/beta.php的屏蔽 – codepixlabs

回答

3

你可以拥有这里面的.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] 
+1

绝对完美:) – codepixlabs

0

根据你对你的问题的评论的澄清 - 这将很难通过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文件。如果只找到一个文件需要它来运行它。

+0

文件夹深度仅为2即文件夹和子文件夹,每个文件夹中的所有文件都是唯一的。如果这样更容易 – codepixlabs

1

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

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

您可以在这里看到demo。它捕获在1地址和父文件夹和文件名在2

注:我已经考虑了地址是IPv4

+0

谢谢!我会看看 – codepixlabs