Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写URL以隐藏.php和变量名_Php_.htaccess_Url Rewriting - Fatal编程技术网

重写URL以隐藏.php和变量名

重写URL以隐藏.php和变量名,php,.htaccess,url-rewriting,Php,.htaccess,Url Rewriting,最近,我学习了使用.htaccess重写URL。作为一名初学者,这对我来说已成为一项艰巨的任务: 我可以重写特定的url,如: RewriteEngine On RewriteRule ^nothing/?$ abc.php [NC,L] 但我不满意,需要你的帮助 php文件保存在名为files的文件夹中。所以我有如下网址: www.mysite.com/files/login.php?lf=student www.mysite.com/files/login.php?lf=

最近,我学习了使用.htaccess重写URL。作为一名初学者,这对我来说已成为一项艰巨的任务:

我可以重写特定的url,如:

RewriteEngine On
RewriteRule    ^nothing/?$    abc.php    [NC,L]
但我不满意,需要你的帮助

php文件保存在名为files的文件夹中。所以我有如下网址:

www.mysite.com/files/login.php?lf=student
www.mysite.com/files/login.php?lf=admin
www.mysite.com/files/s_home.php
www.mysite.com/files/recharge.php
我想要的很简单:

mysite.com/login
mysite.com/login
mysite.com/s_home
mysite.com/recharge
有人能帮忙吗

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

尽管这将按照您的要求执行,但为什么要隐藏.php扩展名?

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在DOCUMENT_根目录下的.htaccess中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/files/$1.php -f
RewriteRule ^([^/]+)/(.+)/?$ /files/$1.php?lf=$2 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/files/$1.php -f
RewriteRule ^([^/]+)/?$ /files/$1.php [L]
你需要两条规则

第一个是所有URL,除了要登录的URL

第二个是for/login,它需要一个额外的参数

您可以在根目录中的.htaccess文件中尝试此操作:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/files/$1.php -f
RewriteRule ^([^/]+)/(.+)/?$ /files/$1.php?lf=$2 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/files/$1.php -f
RewriteRule ^([^/]+)/?$ /files/$1.php [L]
选项+以下符号链接-多视图 重新启动发动机 重写基/ 以静默方式映射除登录之外的所有请求 使用文件夹名称作为脚本名称。 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_FILENAME}-D 重写cond%{REQUEST_URI}!登录[NC] 重写规则^omeca/[^/]+omeca/files/$1.php[L,NC] 以静默方式映射登录请求 将参数传递给脚本的附加查询 重写cond%{REQUEST_URI}!登录\.php[NC] 重写规则^omeca/login/[^/]+omeca/files/login.php?lf=$1[L,NC] 无声地映射

http://example.com/omeca/anything 除非什么都是登录

http://example.com/omeca/files/anything.php

或者,无声地映射

http://example.com/omeca/login/parameter

致:

http://example.com/omeca/files/login.php?lf=parameter


对于永久重定向,请将[L,NC]替换为[R=301,L,NC]

查询lf=student的位置,例如在传入URL中?请澄清您的问题,我不明白。您的示例www.mysite.com/files/login.php?lf=student有一个查询:lf=student。这个查询在哪里:mysite.com/login。很明显,脚本是文件夹的名称,但是查询在哪里?查询是隐藏的。我不能使用.htaccess隐藏该查询吗?但是我不知道。如果它不在传入的URL中,就无法将其传递给脚本。是的,它将以静默方式映射,但它必须存在于某个地方。因为我想隐藏我使用的是php。感谢您的回答,我将尝试使用此功能…它无论如何都没有帮助,服务器软件Header将显示您使用php,当然,除非您可以访问配置设置扫描我不是在本地主机127.0.0.1中测试此功能吗?我试过了,但是失败了。你的本地主机的URL结构是什么。即http://127.0.0.1/mysite..? 另一个选项是测试它,删除RewriteCond%{REQUEST_FILENAME}条件。omeca中的.htaccess文件在哪里?在根目录中,我想它确实是htdocs,但在本地主机中不确定。我将修改我的回答,为您的URL结构。thnks,但仍然没有改变。我尝试将.htaccess放在htdocs、omeca和文件中,但没有成功。请重新检查您的代码